on master help sign in
Start of defining functions in Tactical
commitcfd6dbc5cb0f8743063f532ce3280b1d2e9757e9 authorDavid Raymond Christiansen <david@davidchristiansen.dk> dateThu 19 Mar 2015, 10:44 (12 years ago) parentd36f582
3 files changed+28
libs/prelude/Language/Reflection/Tactical.idr+7 src/Idris/ElabTerm.hs+19 src/Idris/Reflection.hs+2
libs/prelude/Language/Reflection/Tactical.idr+7
@@ -16,6 +16,12 @@ data Arg : Type where
1616data TyDecl : Type where
1717 Declare : TTName -> List Arg -> Raw -> TyDecl
1818
19+data FunClause : Type where
20+ MkFunClause : (lhs, rhs : Raw) -> FunClause
21+
22+data FunDefn : Type where
23+ DefineFun : TTName -> List FunClause -> FunDefn
24+
1925abstract
2026data Tactical : Type -> Type where
2127 -- obligatory control stuff
@@ -48,6 +54,7 @@ data Tactical : Type -> Type where
4854 prim__Intro : Maybe TTName -> Tactical ()
4955
5056 prim__DeclareType : TyDecl -> Tactical ()
57+ prim__DefineFunction : FunDefn -> Tactical ()
5158
5259 prim__Debug : {a : Type} -> Maybe String -> Tactical a
5360
src/Idris/ElabTerm.hs+19
@@ -1701,6 +1701,9 @@ runTactical fc env tm = do tm' <- eval tm
17011701 new_tyDecls e }
17021702 aux <- getAux
17031703 returnUnit
1704+ | n == tacN "prim__DefineFunction", [decl] <- args
1705+ = do undefined
1706+ undefined
17041707 | n == tacN "prim__Debug", [ty, msg] <- args
17051708 = do let msg' = fromTTMaybe msg
17061709 case msg' of
@@ -2879,6 +2882,22 @@ reifyTyDecl (App (App (App (P (DCon _ _ _) n _) tyN) args) ret)
28792882 reifyRArg aTm = fail $ "Couldn't reify " ++ show aTm ++ " as an RArg."
28802883reifyTyDecl tm = fail $ "Couldn't reify " ++ show tm ++ " as a type declaration."
28812884
2885+reifyFunDefn :: Term -> ElabD RFunDefn
2886+reifyFunDefn (App (App (P _ n _) fnN) clauses)
2887+ | n == tacN "DefineFun" =
2888+ do fnN' <- reifyTTName fnN
2889+ clauses' <- case unList clauses of
2890+ Nothing -> fail $ "Couldn't reify " ++ show clauses ++ " as a clause list"
2891+ Just cs -> mapM reifyC cs
2892+ return $ RDefineFun fnN' clauses'
2893+ where reifyC :: Term -> ElabD RFunClause
2894+ reifyC (App (App (P (DCon _ _ _) n _) lhs) rhs)
2895+ | n == tacN "MkFunClause" = liftM2 RMkFunClause
2896+ (reifyRaw lhs)
2897+ (reifyRaw rhs)
2898+ reifyC tm = fail $ "Couldn't reify " ++ show tm ++ " as a clause."
2899+reifyFunDefn tm = fail $ "Couldn't reify " ++ show tm ++ " as a function declaration."
2900+
28822901envTupleType :: Raw
28832902envTupleType
28842903 = raw_apply (Var pairTy) [ (Var $ reflm "TTName")
src/Idris/Reflection.hs+2
@@ -17,5 +17,7 @@ rArgToPArg (RExplicit n _) = PExp 0 [] n Placeholder
1717rArgToPArg (RImplicit n _) = PImp 0 False [] n Placeholder
1818rArgToPArg (RConstraint n _) = PConstraint 0 [] n Placeholder
1919
20+data RFunClause = RMkFunClause Raw Raw
2021
22+data RFunDefn = RDefineFun Name [RFunClause]
2123