@@ -157,8 +157,10 @@ implementation DecEq a => DecEq (List a) where
157157
158158
159159-- For the primitives, we have to cheat because we don't have access to their
160−-- internal implementations. We postulate the inequality proofs because we're
161−-- never going to have to compute anything from them.
160+-- internal implementations. We use believe_me for the inequality proofs
161+-- because we don't them to reduce (and they should never be needed anyway...)
162+-- A postulate would be better, but erasure analysis may think they're needed
163+-- for computation in a higher order setting.
162164
163165--------------------------------------------------------------------------------
164166-- Int
@@ -170,7 +172,8 @@ implementation DecEq Int where
170172 False => No primitiveNotEq
171173 where primitiveEq : x = y
172174 primitiveEq = really_believe_me (Refl {x})
173− postulate primitiveNotEq : x = y -> Void
175+ primitiveNotEq : x = y -> Void
176+ primitiveNotEq prf = believe_me {b = Void} ()
174177
175178--------------------------------------------------------------------------------
176179-- Char
@@ -182,7 +185,8 @@ implementation DecEq Char where
182185 False => No primitiveNotEq
183186 where primitiveEq : x = y
184187 primitiveEq = really_believe_me (Refl {x})
185− postulate primitiveNotEq : x = y -> Void
188+ primitiveNotEq : x = y -> Void
189+ primitiveNotEq prf = believe_me {b = Void} ()
186190
187191--------------------------------------------------------------------------------
188192-- Integer
@@ -194,7 +198,8 @@ implementation DecEq Integer where
194198 False => No primitiveNotEq
195199 where primitiveEq : x = y
196200 primitiveEq = really_believe_me (Refl {x})
197− postulate primitiveNotEq : x = y -> Void
201+ primitiveNotEq : x = y -> Void
202+ primitiveNotEq prf = believe_me {b = Void} ()
198203
199204--------------------------------------------------------------------------------
200205-- String
@@ -206,7 +211,8 @@ implementation DecEq String where
206211 False => No primitiveNotEq
207212 where primitiveEq : x = y
208213 primitiveEq = really_believe_me (Refl {x})
209− postulate primitiveNotEq : x = y -> Void
214+ primitiveNotEq : x = y -> Void
215+ primitiveNotEq prf = believe_me {b = Void} ()
210216
211217--------------------------------------------------------------------------------
212218-- Ptr
@@ -218,7 +224,8 @@ implementation DecEq Ptr where
218224 False => No primitiveNotEq
219225 where primitiveEq : x = y
220226 primitiveEq = really_believe_me (Refl {x})
221− postulate primitiveNotEq : x = y -> Void
227+ primitiveNotEq : x = y -> Void
228+ primitiveNotEq prf = believe_me {b = Void} ()
222229
223230--------------------------------------------------------------------------------
224231-- ManagedPtr
@@ -230,4 +237,5 @@ implementation DecEq ManagedPtr where
230237 False => No primitiveNotEq
231238 where primitiveEq : x = y
232239 primitiveEq = really_believe_me (Refl {x})
233− postulate primitiveNotEq : x = y -> Void
240+ primitiveNotEq : x = y -> Void
241+ primitiveNotEq prf = believe_me {b = Void} ()