0 | module Idrall.Derive.Common
2 | import Language.Reflection
4 | import public Data.String
6 | %language ElabReflection
8 | %hide Data.List.lookup
18 | mkTy : (n : Name) -> (ty : TTImp) -> ITy
19 | mkTy = MkTy EmptyFC . MkFCVal EmptyFC
33 | FromString Name where
34 | fromString s = run (split ('.' ==) s) []
35 | where run : List1 String -> List String -> Name
36 | run (h ::: []) [] = UN $
Basic h
37 | run (h ::: []) ns = NS (MkNS ns) (UN $
Basic h)
38 | run (h ::: (y :: ys)) xs = run (y ::: ys) (h :: xs)
42 | varStr : String -> TTImp
43 | varStr = var . fromString
50 | patClause : (lhs : TTImp) -> (rhs : TTImp) -> Clause
51 | patClause = PatClause EmptyFC
56 | stripNs : Name -> Name
57 | stripNs (NS _ x) = x
63 | genReadableSym : String -> Elab Name
64 | genReadableSym hint = do
65 | MN v i <- genSym hint
66 | | _ => fail "cannot generate readable argument name"
67 | pure $
UN $
Basic (v ++ show i)
71 | primStr : String -> TTImp
72 | primStr = IPrimVal EmptyFC . Str
76 | bindvar : Name -> TTImp
77 | bindvar = IBindVar EmptyFC
82 | implicit' = Implicit EmptyFC True
86 | getArgs : TTImp -> Elab (List (Name, TTImp))
87 | getArgs (IPi _ _ _ (Just n) argTy retTy) = ((n, argTy) ::) <$> getArgs retTy
88 | getArgs (IPi _ _ _ Nothing _ _) = fail $
"All arguments must be explicitly named"
93 | Cons = (List (Name, List (Name, TTImp)))
96 | logCons : Cons -> Elab ()
99 | logCons (x :: xs) = do
103 | go : List (Name, TTImp) -> Elab ()
105 | go ((n, t) :: ys) = do
106 | logMsg "" 7 ("ArgName: " ++ show n)
107 | logTerm "" 7 "ArgType" t
109 | more : (Name, List (Name, TTImp)) -> Elab ()
110 | more (constructor', args) = do
111 | logMsg "" 7 ("Constructor: " ++ show constructor')
122 | record Options where
123 | constructor MkOptions
126 | fieldNameModifier : String -> String
129 | defaultOptions : Options
130 | defaultOptions = MkOptions id