7 TFun
:: Type a
-> Type b
-> Type
(a
-> b
)
12 newtype Base
= In
{ out
:: Term Base
}
15 App
:: Term
(a
->b
) -> Term a
-> Term b
16 Fun
:: (Term a
-> Term b
) -> Term
(a
->b
)
18 reify
:: Type t
-> t
-> Term t
19 reify
(TBase
) v
= out v
20 reify
(TFun a b
) v
= Fun
(\x
-> reify b
(v
(reflect a x
)))
22 reflect
:: Type t
-> Term t
-> t
23 reflect
(TBase
) e
= In e
24 reflect
(TFun a b
) e
= \x
-> reflect b
(App e
(reify a x
))