2 | import Language.Reflection.Util
11 | absClaim : Visibility -> (fun : Name) -> (p : ParamTypeInfo) -> Decl
12 | absClaim vis fun p =
13 | let arg := p.applied
14 | tpe := piAll `(~(arg) -> ~(arg)) (allImplicits p "Abs")
15 | in simpleClaim vis fun tpe
18 | absImplClaim : Visibility -> (impl : Name) -> (p : ParamTypeInfo) -> Decl
19 | absImplClaim vis impl p = implClaimVis vis impl (implType "Abs" p)
25 | absImplDef : (abs, impl : Name) -> Decl
26 | absImplDef abs impl = def impl [patClause (var impl) (appNames "MkAbs" [abs])]
28 | parameters (nms : List Name)
29 | abs : BoundArg 1 Explicit -> TTImp
30 | abs (BA _ [x] _) = `(abs
~(var x))
33 | absDef : Name -> Con n vs -> Decl
34 | absDef fun c = def fun [mapArgs explicit (var fun `app`) abs c]
43 | AbsVis : Visibility -> List Name -> ParamTypeInfo -> Res (List TopLevel)
44 | AbsVis vis nms p = case p.info.cons of
46 | let abs := funName p "abs"
47 | impl := implName p "Abs"
49 | [ TL (absClaim vis abs p) (absDef nms abs c)
50 | , TL (absImplClaim vis impl p) (absImplDef abs impl)
52 | _ => failRecord "Abs"
57 | Abs : List Name -> ParamTypeInfo -> Res (List TopLevel)