@@ -12,6 +12,7 @@ import Idris.ElabTerm
12import Idris.Coverage
12import Idris.Coverage
13import Idris.DataOpts
13import Idris.DataOpts
14import Idris.Providers
14import Idris.Providers
15+import Idris.Primitives
15import Paths_idris
16import Paths_idris
17import Core.TT
18import Core.TT
@@ -210,6 +211,27 @@ elabData info syn doc fc codata (PDatadecl n t_in dcons)
210 | otherwise = count n ts
211 | otherwise = count n ts
211 mParam args (_ : rest) = Nothing : mParam args rest
212 mParam args (_ : rest) = Nothing : mParam args rest
214+-- | Elaborate primitives
216+elabPrims :: Idris ()
217+elabPrims = do mapM_ (elabDecl EAll toplevel)
218+ (map (PData "" defaultSyntax (FC "builtin" 0) False)
219+ [inferDecl, unitDecl, falseDecl, pairDecl, eqDecl])
220+ mapM_ elabPrim primitives
221+ where elabPrim :: Prim -> Idris ()
222+ elabPrim (Prim n ty i def sc tot)
223+ = do updateContext (addOperator n ty i (valuePrim def))
226+ putIState i { idris_scprims = (n, sc) : idris_scprims i }
228+ valuePrim :: ([Const] -> Maybe Const) -> [Value] -> Maybe Value
229+ valuePrim prim vals = fmap VConstant (mapM getConst vals >>= prim)
231+ getConst (VConstant c) = Just c
232+ getConst _ = Nothing
213-- | Elaborate a type provider
235-- | Elaborate a type provider
214elabProvider :: ElabInfo -> SyntaxInfo -> FC -> Name -> PTerm -> PTerm -> Idris ()
236elabProvider :: ElabInfo -> SyntaxInfo -> FC -> Name -> PTerm -> PTerm -> Idris ()
215elabProvider info syn fc n ty tm
237elabProvider info syn fc n ty tm