@@ -13,6 +13,7 @@ import Idris.Coverage
1313import Idris.DataOpts
1414import Idris.Providers
1515import Idris.Primitives
16+import IRTS.Lang
1617import Paths_idris
1718
1819import Core.TT
@@ -218,6 +219,8 @@ elabPrims = do mapM_ (elabDecl EAll toplevel)
218219 (map (PData "" defaultSyntax (FC "builtin" 0) False)
219220 [inferDecl, unitDecl, falseDecl, pairDecl, eqDecl])
220221 mapM_ elabPrim primitives
222+ -- Special case prim__believe_me because it doesn't work on just constants
223+ elabBelieveMe
221224 where elabPrim :: Prim -> Idris ()
222225 elabPrim (Prim n ty i def sc tot)
223226 = do updateContext (addOperator n ty i (valuePrim def))
@@ -232,6 +235,20 @@ elabPrims = do mapM_ (elabDecl EAll toplevel)
232235 getConst _ = Nothing
233236
234237
238+ p_believeMe [_,_,x] = Just x
239+ p_believeMe _ = Nothing
240+ believeTy = Bind (UN "a") (Pi (TType (UVar (-2))))
241+ (Bind (UN "b") (Pi (TType (UVar (-2))))
242+ (Bind (UN "x") (Pi (V 1)) (V 1)))
243+ elabBelieveMe = do let prim__believe_me = (UN "prim__believe_me")
244+ updateContext (addOperator prim__believe_me believeTy 3 p_believeMe)
245+ setTotality prim__believe_me (Partial NotCovering)
246+ i <- getIState
247+ putIState i {
248+ idris_scprims = (prim__believe_me, (3, LNoOp)) : idris_scprims i
249+ }
250+
251+
235252-- | Elaborate a type provider
236253elabProvider :: ElabInfo -> SyntaxInfo -> FC -> Name -> PTerm -> PTerm -> Idris ()
237254elabProvider info syn fc n ty tm