0 | module Derive.FromDouble
2 | import Language.Reflection.Util
11 | fromDblClaim : Visibility -> (fun : Name) -> (p : ParamTypeInfo) -> Decl
12 | fromDblClaim vis fun p =
13 | let arg := p.applied
14 | tpe := piAll `(Double -> ~(arg)) (allImplicits p "FromDouble")
15 | in simpleClaim vis fun tpe
20 | dblImplClaim : Visibility -> (impl : Name) -> (p : ParamTypeInfo) -> Decl
21 | dblImplClaim v impl p = implClaimVis v impl (implType "FromDouble" p)
27 | dblImplDef : (fd, impl : Name) -> Decl
28 | dblImplDef fd impl =
29 | def impl [patClause (var impl) (appNames "MkFromDouble" [fd])]
32 | fromDblDef : Name -> Con n vs -> Decl
34 | let t := `(fromDouble n
)
35 | in def f [patClause (var f `app` bindVar "n") (injArgs explicit (const t) c)]
44 | FromDoubleVis : Visibility -> List Name -> ParamTypeInfo -> Res (List TopLevel)
45 | FromDoubleVis vis nms p = case p.info.cons of
47 | let fun := funName p "fromDouble"
48 | impl := implName p "FromDouble"
50 | [ TL (fromDblClaim vis fun p) (fromDblDef fun c)
51 | , TL (dblImplClaim vis impl p) (dblImplDef fun impl)
53 | _ => failRecord "FromDouble"
57 | FromDouble : List Name -> ParamTypeInfo -> Res (List TopLevel)
58 | FromDouble = FromDoubleVis Public