@@ -75,23 +75,36 @@ impossibleOK : {auto c : Ref Ctxt Defs} ->
75
75
{vars : _} ->
76
76
Defs -> NF vars -> NF vars -> Core Bool
77
77
impossibleOK defs (NTCon _ xn xt xa xargs) (NTCon _ yn yt ya yargs)
78
- = if xn = = yn
79
- then anyM (mismatch defs) ( zipWith ( curry $ mapHom snd ) xargs yargs)
80
- else pure False
78
+ = if xn / = yn
79
+ then pure True
80
+ else anyM (mismatch defs) ( zipWith ( curry $ mapHom snd ) xargs yargs)
81
81
-- If it's a data constructor, any mismatch will do
82
82
impossibleOK defs (NDCon _ _ xt _ xargs) (NDCon _ _ yt _ yargs)
83
83
= if xt /= yt
84
84
then pure True
85
85
else anyM (mismatch defs) (zipWith (curry $ mapHom snd ) xargs yargs)
86
86
impossibleOK defs (NPrimVal _ x) (NPrimVal _ y) = pure (x /= y)
87
- impossibleOK defs (NDCon _ _ _ _ _ ) (NPrimVal _ _ ) = pure True
87
+
88
+ -- NPrimVal is apart from NDCon, NTCon, NBind, and NType
88
89
impossibleOK defs (NPrimVal _ _ ) (NDCon _ _ _ _ _ ) = pure True
89
- impossibleOK defs (NTCon _ _ _ _ _ ) (NPrimVal _ _ ) = pure True
90
+ impossibleOK defs (NDCon _ _ _ _ _ ) (NPrimVal _ _ ) = pure True
91
+ impossibleOK defs (NPrimVal _ _ ) (NBind _ _ _ _ ) = pure True
92
+ impossibleOK defs (NBind _ _ _ _ ) (NPrimVal _ _ ) = pure True
90
93
impossibleOK defs (NPrimVal _ _ ) (NTCon _ _ _ _ _ ) = pure True
91
- impossibleOK defs (NTCon _ _ _ _ _ ) (NType _ ) = pure True
92
- impossibleOK defs (NType _ ) (NTCon _ _ _ _ _ ) = pure True
94
+ impossibleOK defs (NTCon _ _ _ _ _ ) (NPrimVal _ _ ) = pure True
93
95
impossibleOK defs (NPrimVal _ _ ) (NType _ ) = pure True
94
96
impossibleOK defs (NType _ ) (NPrimVal _ _ ) = pure True
97
+
98
+ -- NTCon is apart from NBind, and NType
99
+ impossibleOK defs (NTCon _ _ _ _ _ ) (NBind _ _ _ _ ) = pure True
100
+ impossibleOK defs (NBind _ _ _ _ ) (NTCon _ _ _ _ _ ) = pure True
101
+ impossibleOK defs (NTCon _ _ _ _ _ ) (NType _ ) = pure True
102
+ impossibleOK defs (NType _ ) (NTCon _ _ _ _ _ ) = pure True
103
+
104
+ -- NBind is apart from NType
105
+ impossibleOK defs (NBind _ _ _ _ ) (NType _ ) = pure True
106
+ impossibleOK defs (NType _ ) (NBind _ _ _ _ ) = pure True
107
+
95
108
impossibleOK defs x y = pure False
96
109
97
110
export
@@ -133,6 +146,9 @@ recoverable defs (NPrimVal _ _) (NTCon _ _ _ _ _) = pure False
133
146
-- Type constructor vs. type
134
147
recoverable defs (NTCon _ _ _ _ _ ) (NType _ ) = pure False
135
148
recoverable defs (NType _ ) (NTCon _ _ _ _ _ ) = pure False
149
+ -- Type constructor vs. binder
150
+ recoverable defs (NTCon _ _ _ _ _ ) (NBind _ _ _ _ ) = pure False
151
+ recoverable defs (NBind _ _ _ _ ) (NTCon _ _ _ _ _ ) = pure False
136
152
137
153
recoverable defs (NTCon _ _ _ _ _ ) _ = pure True
138
154
recoverable defs _ (NTCon _ _ _ _ _ ) = pure True
@@ -155,6 +171,9 @@ recoverable defs (NApp _ (NRef _ f) fargs) (NApp _ (NRef _ g) gargs)
155
171
156
172
-- PRIMITIVES
157
173
recoverable defs (NPrimVal _ x) (NPrimVal _ y) = pure (x == y)
174
+ -- primitive vs. binder
175
+ recoverable defs (NPrimVal _ _ ) (NBind _ _ _ _ ) = pure False
176
+ recoverable defs (NBind _ _ _ _ ) (NPrimVal _ _ ) = pure False
158
177
159
178
-- OTHERWISE: no
160
179
recoverable defs x y = pure False
0 commit comments