Safe Haskell | None |
---|
- data Variable a
- data Let a where
- data HOLambda dom p pVar a where
- type HODomain dom p pVar = (HOLambda dom p pVar :+: ((Variable :|| pVar) :+: dom)) :|| p
- type FODomain dom p pVar = (CLambda pVar :+: ((Variable :|| pVar) :+: dom)) :|| p
- type CLambda pVar = SubConstr2 (->) Lambda pVar Top
- lambda :: (p (a -> b), p a, pVar a) => (ASTF (HODomain dom p pVar) a -> ASTF (HODomain dom p pVar) b) -> ASTF (HODomain dom p pVar) (a -> b)
- reifyM :: forall dom p pVar a. AST (HODomain dom p pVar) a -> State VarId (AST (FODomain dom p pVar) a)
- reifyTop :: AST (HODomain dom p pVar) a -> AST (FODomain dom p pVar) a
- reify :: Syntactic a (HODomain dom p pVar) => a -> ASTF (FODomain dom p pVar) (Internal a)
Documentation
Variables
Equality Variable |
|
ToTree Variable | |
Render Variable | |
Constrained Variable | |
EvalBind Variable | |
Optimize Variable | |
(AlphaEq dom dom dom env, VarEqEnv env) => AlphaEq Variable Variable dom env | |
(Syntactic a (HODomain dom p pVar), Syntactic b (HODomain dom p pVar), p (Internal a -> Internal b), p (Internal a), pVar (Internal a)) => Syntactic (a -> b) (HODomain dom p pVar) | |
(Syntactic a (HODomain dom Typeable pVar), InjectC (MONAD m) dom (m (Internal a)), Monad m, Typeable1 m, Typeable (Internal a), pVar (Internal a)) => Syntactic (Mon dom pVar m a) (HODomain dom Typeable pVar) |
data HOLambda dom p pVar a whereSource
Higher-order lambda binding
HOLambda :: (p a, pVar a) => (ASTF (HODomain dom p pVar) a -> ASTF (HODomain dom p pVar) b) -> HOLambda dom p pVar (Full (a -> b)) |
(Syntactic a (HODomain dom p pVar), Syntactic b (HODomain dom p pVar), p (Internal a -> Internal b), p (Internal a), pVar (Internal a)) => Syntactic (a -> b) (HODomain dom p pVar) | |
(Syntactic a (HODomain dom Typeable pVar), InjectC (MONAD m) dom (m (Internal a)), Monad m, Typeable1 m, Typeable (Internal a), pVar (Internal a)) => Syntactic (Mon dom pVar m a) (HODomain dom Typeable pVar) |
type HODomain dom p pVar = (HOLambda dom p pVar :+: ((Variable :|| pVar) :+: dom)) :|| pSource
Adding support for higher-order abstract syntax to a domain
type FODomain dom p pVar = (CLambda pVar :+: ((Variable :|| pVar) :+: dom)) :|| pSource
Equivalent to HODomain
(including type constraints), but using a first-order representation
of binding
type CLambda pVar = SubConstr2 (->) Lambda pVar TopSource
Lambda
with a constraint on the bound variable type
lambda :: (p (a -> b), p a, pVar a) => (ASTF (HODomain dom p pVar) a -> ASTF (HODomain dom p pVar) b) -> ASTF (HODomain dom p pVar) (a -> b)Source
Lambda binding
reifyM :: forall dom p pVar a. AST (HODomain dom p pVar) a -> State VarId (AST (FODomain dom p pVar) a)Source