syntactic-1.17: Generic abstract syntax, and utilities for embedded languages

Safe HaskellNone
LanguageHaskell2010

Language.Syntactic.Constructs.Binding

Contents

Description

General binding constructs

Synopsis

Variables

newtype VarId Source #

Variable identifier

Constructors

VarId 

Fields

Instances
Enum VarId Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Eq VarId Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

(==) :: VarId -> VarId -> Bool #

(/=) :: VarId -> VarId -> Bool #

Integral VarId Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Num VarId Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Ord VarId Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

compare :: VarId -> VarId -> Ordering #

(<) :: VarId -> VarId -> Bool #

(<=) :: VarId -> VarId -> Bool #

(>) :: VarId -> VarId -> Bool #

(>=) :: VarId -> VarId -> Bool #

max :: VarId -> VarId -> VarId #

min :: VarId -> VarId -> VarId #

Real VarId Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

toRational :: VarId -> Rational #

Show VarId Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

showsPrec :: Int -> VarId -> ShowS #

show :: VarId -> String #

showList :: [VarId] -> ShowS #

Ix VarId Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

p ~ Sat dom => NodeEqEnv dom (EqEnv dom p) Source # 
Instance details

Defined in Language.Syntactic.Sharing.Graph

Methods

prjNodeEqEnv :: EqEnv dom p -> NodeEnv dom (Sat dom) Source #

modNodeEqEnv :: (NodeEnv dom (Sat dom) -> NodeEnv dom (Sat dom)) -> EqEnv dom p -> EqEnv dom p Source #

VarEqEnv [(VarId, VarId)] Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

prjVarEqEnv :: [(VarId, VarId)] -> [(VarId, VarId)] Source #

modVarEqEnv :: ([(VarId, VarId)] -> [(VarId, VarId)]) -> [(VarId, VarId)] -> [(VarId, VarId)] Source #

VarEqEnv (EqEnv dom p) Source # 
Instance details

Defined in Language.Syntactic.Sharing.Graph

Methods

prjVarEqEnv :: EqEnv dom p -> [(VarId, VarId)] Source #

modVarEqEnv :: ([(VarId, VarId)] -> [(VarId, VarId)]) -> EqEnv dom p -> EqEnv dom p Source #

data Variable a where Source #

Variables

Constructors

Variable :: VarId -> Variable (Full a) 
Instances
StringTree Variable Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Render Variable Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Equality Variable Source #

equal does strict identifier comparison; i.e. no alpha equivalence.

exprHash assigns the same hash to all variables. This is a valid over-approximation that enables the following property:

alphaEq a b  ==>  exprHash a == exprHash b
Instance details

Defined in Language.Syntactic.Constructs.Binding

Constrained Variable Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Associated Types

type Sat Variable :: * -> Constraint Source #

EvalBind Variable Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Variable sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

Optimize Variable Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding.Optimize

Methods

optimizeSym :: Optimize' dom => ConstFolder dom -> (Variable sig -> AST dom sig) -> Variable sig -> Args (AST dom) sig -> Writer (Set VarId) (ASTF dom (DenResult sig)) Source #

(AlphaEq dom dom dom env, VarEqEnv env) => AlphaEq Variable Variable dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Variable a -> Args (AST dom) a -> Variable b -> Args (AST dom) b -> Reader env Bool Source #

IsHODomain (HODomain dom p pVar) p pVar Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding.HigherOrder

Methods

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 #

type Sat Variable Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Lambda binding

data Lambda a where Source #

Lambda binding

Constructors

Lambda :: VarId -> Lambda (b :-> Full (a -> b)) 
Instances
StringTree Lambda Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Render Lambda Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Equality Lambda Source #

equal does strict identifier comparison; i.e. no alpha equivalence.

exprHash assigns the same hash to all Lambda bindings. This is a valid over-approximation that enables the following property:

alphaEq a b  ==>  exprHash a == exprHash b
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

equal :: Lambda a -> Lambda b -> Bool Source #

exprHash :: Lambda a -> Hash Source #

Constrained Lambda Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Associated Types

type Sat Lambda :: * -> Constraint Source #

EvalBind Lambda Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Lambda sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

Optimize Lambda Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding.Optimize

Methods

optimizeSym :: Optimize' dom => ConstFolder dom -> (Lambda sig -> AST dom sig) -> Lambda sig -> Args (AST dom) sig -> Writer (Set VarId) (ASTF dom (DenResult sig)) Source #

(AlphaEq dom dom dom env, VarEqEnv env) => AlphaEq Lambda Lambda dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Lambda a -> Args (AST dom) a -> Lambda b -> Args (AST dom) b -> Reader env Bool Source #

type Sat Lambda Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

type Sat Lambda = Top

reuseLambda :: Lambda (b :-> Full (a -> b)) -> Lambda (c :-> Full (a -> c)) Source #

Allow an existing binding to be used with a body of a different type

Let binding

data Let a where Source #

Let binding

Let is just an application operator with flipped argument order. The argument (a -> b) is preferably constructed by Lambda.

Constructors

Let :: Let (a :-> ((a -> b) :-> Full b)) 
Instances
StringTree Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Render Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

renderSym :: Let sig -> String Source #

renderArgs :: [String] -> Let sig -> String Source #

Eval Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evaluate :: Let a -> Denotation a Source #

Equality Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

equal :: Let a -> Let b -> Bool Source #

exprHash :: Let a -> Hash Source #

Constrained Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Associated Types

type Sat Let :: * -> Constraint Source #

Methods

exprDict :: Let a -> Dict (Sat Let (DenResult a)) Source #

EvalBind Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Let sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

Optimize Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding.Optimize

Methods

optimizeSym :: Optimize' dom => ConstFolder dom -> (Let sig -> AST dom sig) -> Let sig -> Args (AST dom) sig -> Writer (Set VarId) (ASTF dom (DenResult sig)) Source #

AlphaEq dom dom dom env => AlphaEq Let Let dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Let a -> Args (AST dom) a -> Let b -> Args (AST dom) b -> Reader env Bool Source #

type Sat Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

type Sat Let = Top

Interpretation

subst Source #

Arguments

:: (ConstrainedBy dom Typeable, Project Lambda dom, Project Variable dom) 
=> VarId

Variable to be substituted

-> ASTF dom a

Expression to substitute for

-> ASTF dom b

Expression to substitute in

-> ASTF dom b 

Should be a capture-avoiding substitution, but it is currently not correct.

Note: Variables with a different type than the new expression will be silently ignored.

betaReduce Source #

Arguments

:: (ConstrainedBy dom Typeable, Project Lambda dom, Project Variable dom) 
=> ASTF dom a

Argument

-> ASTF dom (a -> b)

Function to be reduced

-> ASTF dom b 

Beta-reduction of an expression. The expression to be reduced is assumed to be a Lambda.

class EvalBind sub where Source #

Evaluation of expressions with variables

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => sub sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

evalBindSym :: (Eval sub, EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => sub sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

Instances
EvalBind Empty Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Empty sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Tuple Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Tuple sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Select Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Select sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Literal Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Literal sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Identity Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Identity sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Construct Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Construct sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Condition Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Condition sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Let Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Let sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Lambda Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Lambda sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind Variable Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => Variable sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

Monad m => EvalBind (MONAD m) Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => MONAD m sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

(EvalBind sub1, EvalBind sub2) => EvalBind (sub1 :+: sub2) Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom, ConstrainedBy dom Typeable, Typeable (DenResult sig)) => (sub1 :+: sub2) sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind dom => EvalBind (dom :|| pred) Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom0, ConstrainedBy dom0 Typeable, Typeable (DenResult sig)) => (dom :|| pred) sig -> Args (AST dom0) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind dom => EvalBind (dom :| pred) Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom0, ConstrainedBy dom0 Typeable, Typeable (DenResult sig)) => (dom :| pred) sig -> Args (AST dom0) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind dom => EvalBind (Decor info dom) Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom0, ConstrainedBy dom0 Typeable, Typeable (DenResult sig)) => Decor info dom sig -> Args (AST dom0) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind dom => EvalBind (SubConstr1 c dom p) Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom0, ConstrainedBy dom0 Typeable, Typeable (DenResult sig)) => SubConstr1 c dom p sig -> Args (AST dom0) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

EvalBind dom => EvalBind (SubConstr2 c dom pa pb) Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

evalBindSym :: (EvalBind dom0, ConstrainedBy dom0 Typeable, Typeable (DenResult sig)) => SubConstr2 c dom pa pb sig -> Args (AST dom0) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

evalBindM :: (EvalBind dom, ConstrainedBy dom Typeable) => ASTF dom a -> Reader [(VarId, Dynamic)] a Source #

Evaluation of possibly open expressions

evalBind :: (EvalBind dom, ConstrainedBy dom Typeable) => ASTF dom a -> a Source #

Evaluation of closed expressions

appDen :: Denotation sig -> Args Identity sig -> DenResult sig Source #

Apply a symbol denotation to a list of arguments

evalBindSymDefault :: (Eval sub, EvalBind dom, ConstrainedBy dom Typeable) => sub sig -> Args (AST dom) sig -> Reader [(VarId, Dynamic)] (DenResult sig) Source #

Convenient default implementation of evalBindSym

Alpha equivalence

class VarEqEnv a where Source #

Environments containing a list of variable equivalences

Minimal complete definition

prjVarEqEnv, modVarEqEnv

Methods

prjVarEqEnv :: a -> [(VarId, VarId)] Source #

modVarEqEnv :: ([(VarId, VarId)] -> [(VarId, VarId)]) -> a -> a Source #

Instances
VarEqEnv [(VarId, VarId)] Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

prjVarEqEnv :: [(VarId, VarId)] -> [(VarId, VarId)] Source #

modVarEqEnv :: ([(VarId, VarId)] -> [(VarId, VarId)]) -> [(VarId, VarId)] -> [(VarId, VarId)] Source #

VarEqEnv (EqEnv dom p) Source # 
Instance details

Defined in Language.Syntactic.Sharing.Graph

Methods

prjVarEqEnv :: EqEnv dom p -> [(VarId, VarId)] Source #

modVarEqEnv :: ([(VarId, VarId)] -> [(VarId, VarId)]) -> EqEnv dom p -> EqEnv dom p Source #

class AlphaEq sub1 sub2 dom env where Source #

Alpha-equivalence

Methods

alphaEqSym :: sub1 a -> Args (AST dom) a -> sub2 b -> Args (AST dom) b -> Reader env Bool Source #

alphaEqSym :: (AlphaEq dom dom dom env, Equality sub2, sub1 ~ sub2) => sub1 a -> Args (AST dom) a -> sub2 b -> Args (AST dom) b -> Reader env Bool Source #

Instances
AlphaEq Empty Empty dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Empty a -> Args (AST dom) a -> Empty b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq dom dom dom env => AlphaEq Tuple Tuple dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Tuple a -> Args (AST dom) a -> Tuple b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq dom dom dom env => AlphaEq Select Select dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Select a -> Args (AST dom) a -> Select b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq dom dom dom env => AlphaEq Literal Literal dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Literal a -> Args (AST dom) a -> Literal b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq dom dom dom env => AlphaEq Identity Identity dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Identity a -> Args (AST dom) a -> Identity b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq dom dom dom env => AlphaEq Construct Construct dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Construct a -> Args (AST dom) a -> Construct b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq dom dom dom env => AlphaEq Condition Condition dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Condition a -> Args (AST dom) a -> Condition b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq dom dom dom env => AlphaEq Let Let dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Let a -> Args (AST dom) a -> Let b -> Args (AST dom) b -> Reader env Bool Source #

(AlphaEq dom dom dom env, VarEqEnv env) => AlphaEq Lambda Lambda dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Lambda a -> Args (AST dom) a -> Lambda b -> Args (AST dom) b -> Reader env Bool Source #

(AlphaEq dom dom dom env, VarEqEnv env) => AlphaEq Variable Variable dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Variable a -> Args (AST dom) a -> Variable b -> Args (AST dom) b -> Reader env Bool Source #

(AlphaEq dom dom dom env, NodeEqEnv dom env) => AlphaEq Node Node dom env Source # 
Instance details

Defined in Language.Syntactic.Sharing.Graph

Methods

alphaEqSym :: Node a -> Args (AST dom) a -> Node b -> Args (AST dom) b -> Reader env Bool Source #

(AlphaEq dom dom dom env, Monad m) => AlphaEq (MONAD m) (MONAD m) dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: MONAD m a -> Args (AST dom) a -> MONAD m b -> Args (AST dom) b -> Reader env Bool Source #

(AlphaEq subA1 subB1 dom env, AlphaEq subA2 subB2 dom env) => AlphaEq (subA1 :+: subA2) (subB1 :+: subB2) dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: (subA1 :+: subA2) a -> Args (AST dom) a -> (subB1 :+: subB2) b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq sub sub dom env => AlphaEq (sub :|| pred) (sub :|| pred) dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: (sub :|| pred) a -> Args (AST dom) a -> (sub :|| pred) b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq sub sub dom env => AlphaEq (sub :| pred) (sub :| pred) dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: (sub :| pred) a -> Args (AST dom) a -> (sub :| pred) b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq sub sub dom env => AlphaEq (Decor info sub) (Decor info sub) dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: Decor info sub a -> Args (AST dom) a -> Decor info sub b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq sub sub dom env => AlphaEq (SubConstr1 c sub p) (SubConstr1 c sub p) dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: SubConstr1 c sub p a -> Args (AST dom) a -> SubConstr1 c sub p b -> Args (AST dom) b -> Reader env Bool Source #

AlphaEq sub sub dom env => AlphaEq (SubConstr2 c sub pa pb) (SubConstr2 c sub pa pb) dom env Source # 
Instance details

Defined in Language.Syntactic.Constructs.Binding

Methods

alphaEqSym :: SubConstr2 c sub pa pb a -> Args (AST dom) a -> SubConstr2 c sub pa pb b -> Args (AST dom) b -> Reader env Bool Source #

alphaEqM :: AlphaEq dom dom dom env => ASTF dom a -> ASTF dom b -> Reader env Bool Source #

alphaEqM2 :: AlphaEq dom dom dom env => ASTF dom b -> dom a -> Args (AST dom) a -> Reader env Bool Source #

alphaEq :: AlphaEq dom dom dom [(VarId, VarId)] => ASTF dom a -> ASTF dom b -> Bool Source #

Alpha-equivalence on lambda expressions. Free variables are taken to be equivalent if they have the same identifier.

alphaEqSymDefault :: (Equality sub, AlphaEq dom dom dom env) => sub a -> Args (AST dom) a -> sub b -> Args (AST dom) b -> Reader env Bool Source #

alphaEqChildren :: AlphaEq dom dom dom env => AST dom a -> AST dom b -> Reader env Bool Source #