0 | module Derive.FromString
2 | import Language.Reflection.Util
11 | fromStrClaim : Visibility -> (fun : Name) -> (p : ParamTypeInfo) -> Decl
12 | fromStrClaim vis fun p =
13 | let arg := p.applied
14 | tpe := piAll `(String -> ~(arg)) (allImplicits p "FromString")
15 | in simpleClaim vis fun tpe
20 | strImplClaim : Visibility -> (impl : Name) -> (p : ParamTypeInfo) -> Decl
21 | strImplClaim v impl p = implClaimVis v impl (implType "FromString" p)
27 | strImplDef : (fd, impl : Name) -> Decl
28 | strImplDef fd impl =
29 | def impl [patClause (var impl) (appNames "MkFromString" [fd])]
32 | fromStrDef : Name -> Con n vs -> Decl
34 | let t := `(fromString n
)
35 | in def f [patClause (var f `app` bindVar "n") (injArgs explicit (const t) c)]
49 | FromStringVis : Visibility -> List Name -> ParamTypeInfo -> Res (List TopLevel)
50 | FromStringVis vis nms p = case p.info.cons of
52 | let fun := funName p "fromString"
53 | impl := implName p "FromString"
55 | [ TL (fromStrClaim vis fun p) (fromStrDef fun c)
56 | , TL (strImplClaim vis impl p) (strImplDef fun impl)
58 | _ => failRecord "FromString"
62 | FromString : List Name -> ParamTypeInfo -> Res (List TopLevel)
63 | FromString = FromStringVis Public