Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module contains the abstract syntax tree of the term language.
Synopsis
- newtype Term prim loc v = Term {}
- data TermF prim loc v r
- data CaseAlt loc v a = CaseAlt {
- caseAlt'loc :: loc
- caseAlt'tag :: v
- caseAlt'args :: [(loc, v)]
- caseAlt'rhs :: a
- data Bind loc var a = Bind {}
- varE :: loc -> var -> Term prim loc var
- primE :: loc -> prim -> Term prim loc var
- appE :: loc -> Term prim loc v -> Term prim loc v -> Term prim loc v
- lamE :: loc -> v -> Term prim loc v -> Term prim loc v
- letE :: loc -> Bind loc v (Term prim loc v) -> Term prim loc v -> Term prim loc v
- letRecE :: loc -> [Bind loc v (Term prim loc v)] -> Term prim loc v -> Term prim loc v
- assertTypeE :: loc -> Term prim loc v -> Type loc v -> Term prim loc v
- caseE :: loc -> Term prim loc v -> [CaseAlt loc v (Term prim loc v)] -> Term prim loc v
- constrE :: loc -> v -> Term prim loc v
- bottomE :: loc -> Term prim loc v
- freeVars :: Ord v => Term prim loc v -> Set v
- sortDeps :: Ord v => [(v, Term prim loc v)] -> [(v, Term prim loc v)]
Documentation
newtype Term prim loc v Source #
The type of terms.
Instances
TypeFunctor (Term prim) Source # | |
LocFunctor (Term prim) Source # | |
CanApply (Term prim) Source # | |
Functor (Term prim loc) Source # | |
(PrettyVar v, Pretty prim) => Pretty (FixityCtx v (Term prim loc v)) Source # | |
(Eq prim, Eq loc, Eq v) => Eq (Term prim loc v) Source # | |
(Data prim, Data loc, Data v) => Data (Term prim loc v) Source # | |
Defined in Type.Check.HM.Term gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Term prim loc v -> c (Term prim loc v) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Term prim loc v) # toConstr :: Term prim loc v -> Constr # dataTypeOf :: Term prim loc v -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Term prim loc v)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Term prim loc v)) # gmapT :: (forall b. Data b => b -> b) -> Term prim loc v -> Term prim loc v # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Term prim loc v -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Term prim loc v -> r # gmapQ :: (forall d. Data d => d -> u) -> Term prim loc v -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Term prim loc v -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Term prim loc v -> m (Term prim loc v) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Term prim loc v -> m (Term prim loc v) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Term prim loc v -> m (Term prim loc v) # | |
(Show prim, Show loc, Show v) => Show (Term prim loc v) Source # | |
(PrettyVar v, Pretty prim) => Pretty (Term prim loc v) Source # | |
Defined in Type.Check.HM.Pretty | |
HasLoc (Term prim loc v) Source # | |
type Loc (Term prim loc v) Source # | |
Defined in Type.Check.HM.Term |
data TermF prim loc v r Source #
Term functor. The arguments are
loc
for source code locations, v
for variables, r
for recurion.
Var loc v | Variables. |
Prim loc prim | Primitives. |
App loc r r | Applications. |
Lam loc v r | Abstractions. |
Let loc (Bind loc v r) r | Let bindings. |
LetRec loc [Bind loc v r] r | Recursive let bindings |
AssertType loc r (Type loc v) | Assert type. |
Case loc r [CaseAlt loc v r] | case alternatives |
Constr loc v | constructor with tag |
Bottom loc | value of any type that means failed program. |
Instances
Functor (TermF prim loc v) Source # | |
Foldable (TermF prim loc v) Source # | |
Defined in Type.Check.HM.Term fold :: Monoid m => TermF prim loc v m -> m # foldMap :: Monoid m => (a -> m) -> TermF prim loc v a -> m # foldMap' :: Monoid m => (a -> m) -> TermF prim loc v a -> m # foldr :: (a -> b -> b) -> b -> TermF prim loc v a -> b # foldr' :: (a -> b -> b) -> b -> TermF prim loc v a -> b # foldl :: (b -> a -> b) -> b -> TermF prim loc v a -> b # foldl' :: (b -> a -> b) -> b -> TermF prim loc v a -> b # foldr1 :: (a -> a -> a) -> TermF prim loc v a -> a # foldl1 :: (a -> a -> a) -> TermF prim loc v a -> a # toList :: TermF prim loc v a -> [a] # null :: TermF prim loc v a -> Bool # length :: TermF prim loc v a -> Int # elem :: Eq a => a -> TermF prim loc v a -> Bool # maximum :: Ord a => TermF prim loc v a -> a # minimum :: Ord a => TermF prim loc v a -> a # | |
Traversable (TermF prim loc v) Source # | |
Defined in Type.Check.HM.Term traverse :: Applicative f => (a -> f b) -> TermF prim loc v a -> f (TermF prim loc v b) # sequenceA :: Applicative f => TermF prim loc v (f a) -> f (TermF prim loc v a) # mapM :: Monad m => (a -> m b) -> TermF prim loc v a -> m (TermF prim loc v b) # sequence :: Monad m => TermF prim loc v (m a) -> m (TermF prim loc v a) # | |
(Eq prim, Eq loc, Eq v) => Eq1 (TermF prim loc v) Source # | |
(Ord prim, Ord loc, Ord v) => Ord1 (TermF prim loc v) Source # | |
Defined in Type.Check.HM.Term | |
(Show prim, Show loc, Show v) => Show1 (TermF prim loc v) Source # | |
(Eq loc, Eq v, Eq prim, Eq r) => Eq (TermF prim loc v r) Source # | |
(Data prim, Data loc, Data v, Data r) => Data (TermF prim loc v r) Source # | |
Defined in Type.Check.HM.Term gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> TermF prim loc v r -> c (TermF prim loc v r) # gunfold :: (forall b r0. Data b => c (b -> r0) -> c r0) -> (forall r1. r1 -> c r1) -> Constr -> c (TermF prim loc v r) # toConstr :: TermF prim loc v r -> Constr # dataTypeOf :: TermF prim loc v r -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (TermF prim loc v r)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (TermF prim loc v r)) # gmapT :: (forall b. Data b => b -> b) -> TermF prim loc v r -> TermF prim loc v r # gmapQl :: (r0 -> r' -> r0) -> r0 -> (forall d. Data d => d -> r') -> TermF prim loc v r -> r0 # gmapQr :: forall r0 r'. (r' -> r0 -> r0) -> r0 -> (forall d. Data d => d -> r') -> TermF prim loc v r -> r0 # gmapQ :: (forall d. Data d => d -> u) -> TermF prim loc v r -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> TermF prim loc v r -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> TermF prim loc v r -> m (TermF prim loc v r) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> TermF prim loc v r -> m (TermF prim loc v r) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> TermF prim loc v r -> m (TermF prim loc v r) # | |
(Show loc, Show v, Show prim, Show r) => Show (TermF prim loc v r) Source # | |
Case alternatives
CaseAlt | |
|
Instances
Functor (CaseAlt loc v) Source # | |
Foldable (CaseAlt loc v) Source # | |
Defined in Type.Check.HM.Term fold :: Monoid m => CaseAlt loc v m -> m # foldMap :: Monoid m => (a -> m) -> CaseAlt loc v a -> m # foldMap' :: Monoid m => (a -> m) -> CaseAlt loc v a -> m # foldr :: (a -> b -> b) -> b -> CaseAlt loc v a -> b # foldr' :: (a -> b -> b) -> b -> CaseAlt loc v a -> b # foldl :: (b -> a -> b) -> b -> CaseAlt loc v a -> b # foldl' :: (b -> a -> b) -> b -> CaseAlt loc v a -> b # foldr1 :: (a -> a -> a) -> CaseAlt loc v a -> a # foldl1 :: (a -> a -> a) -> CaseAlt loc v a -> a # toList :: CaseAlt loc v a -> [a] # null :: CaseAlt loc v a -> Bool # length :: CaseAlt loc v a -> Int # elem :: Eq a => a -> CaseAlt loc v a -> Bool # maximum :: Ord a => CaseAlt loc v a -> a # minimum :: Ord a => CaseAlt loc v a -> a # | |
Traversable (CaseAlt loc v) Source # | |
Defined in Type.Check.HM.Term | |
(Eq loc, Eq v) => Eq1 (CaseAlt loc v) Source # | |
(Ord loc, Ord v) => Ord1 (CaseAlt loc v) Source # | |
Defined in Type.Check.HM.Term | |
(Show loc, Show v) => Show1 (CaseAlt loc v) Source # | |
(Eq loc, Eq v, Eq a) => Eq (CaseAlt loc v a) Source # | |
(Data loc, Data v, Data a) => Data (CaseAlt loc v a) Source # | |
Defined in Type.Check.HM.Term gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CaseAlt loc v a -> c (CaseAlt loc v a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (CaseAlt loc v a) # toConstr :: CaseAlt loc v a -> Constr # dataTypeOf :: CaseAlt loc v a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (CaseAlt loc v a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (CaseAlt loc v a)) # gmapT :: (forall b. Data b => b -> b) -> CaseAlt loc v a -> CaseAlt loc v a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CaseAlt loc v a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CaseAlt loc v a -> r # gmapQ :: (forall d. Data d => d -> u) -> CaseAlt loc v a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CaseAlt loc v a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CaseAlt loc v a -> m (CaseAlt loc v a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CaseAlt loc v a -> m (CaseAlt loc v a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CaseAlt loc v a -> m (CaseAlt loc v a) # | |
(Show loc, Show v, Show a) => Show (CaseAlt loc v a) Source # | |
Local variable definition.
let lhs = rhs in ...
Instances
Functor (Bind loc var) Source # | |
Foldable (Bind loc var) Source # | |
Defined in Type.Check.HM.Term fold :: Monoid m => Bind loc var m -> m # foldMap :: Monoid m => (a -> m) -> Bind loc var a -> m # foldMap' :: Monoid m => (a -> m) -> Bind loc var a -> m # foldr :: (a -> b -> b) -> b -> Bind loc var a -> b # foldr' :: (a -> b -> b) -> b -> Bind loc var a -> b # foldl :: (b -> a -> b) -> b -> Bind loc var a -> b # foldl' :: (b -> a -> b) -> b -> Bind loc var a -> b # foldr1 :: (a -> a -> a) -> Bind loc var a -> a # foldl1 :: (a -> a -> a) -> Bind loc var a -> a # toList :: Bind loc var a -> [a] # null :: Bind loc var a -> Bool # length :: Bind loc var a -> Int # elem :: Eq a => a -> Bind loc var a -> Bool # maximum :: Ord a => Bind loc var a -> a # minimum :: Ord a => Bind loc var a -> a # | |
Traversable (Bind loc var) Source # | |
Defined in Type.Check.HM.Term | |
(Eq loc, Eq var) => Eq1 (Bind loc var) Source # | |
(Ord loc, Ord var) => Ord1 (Bind loc var) Source # | |
Defined in Type.Check.HM.Term | |
(Show loc, Show var) => Show1 (Bind loc var) Source # | |
(Eq loc, Eq var, Eq a) => Eq (Bind loc var a) Source # | |
(Data loc, Data var, Data a) => Data (Bind loc var a) Source # | |
Defined in Type.Check.HM.Term gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Bind loc var a -> c (Bind loc var a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Bind loc var a) # toConstr :: Bind loc var a -> Constr # dataTypeOf :: Bind loc var a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Bind loc var a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Bind loc var a)) # gmapT :: (forall b. Data b => b -> b) -> Bind loc var a -> Bind loc var a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Bind loc var a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Bind loc var a -> r # gmapQ :: (forall d. Data d => d -> u) -> Bind loc var a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Bind loc var a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Bind loc var a -> m (Bind loc var a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Bind loc var a -> m (Bind loc var a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Bind loc var a -> m (Bind loc var a) # | |
(Show loc, Show var, Show a) => Show (Bind loc var a) Source # | |
varE :: loc -> var -> Term prim loc var Source #
varE
loc x
constructs a variable whose name is x
with source code at loc
.
primE :: loc -> prim -> Term prim loc var Source #
primE
loc prim
constructs a primitive with source code at loc
.
appE :: loc -> Term prim loc v -> Term prim loc v -> Term prim loc v Source #
appE
loc a b
constructs an application of a
to b
with source code at loc
.
lamE :: loc -> v -> Term prim loc v -> Term prim loc v Source #
lamE
loc x e
constructs an abstraction of x
over e
with source code at loc
.
letE :: loc -> Bind loc v (Term prim loc v) -> Term prim loc v -> Term prim loc v Source #
letE
loc binds e
constructs a binding of binds
in e
with source code at loc
.
No recursive bindings.
letRecE :: loc -> [Bind loc v (Term prim loc v)] -> Term prim loc v -> Term prim loc v Source #
letRecE
loc binds e
constructs a recursive binding of binds
in e
with source code at loc
.
assertTypeE :: loc -> Term prim loc v -> Type loc v -> Term prim loc v Source #
assertTypeE
loc term ty
constructs assertion of the type ty
to term
.
caseE :: loc -> Term prim loc v -> [CaseAlt loc v (Term prim loc v)] -> Term prim loc v Source #
caseE
loc expr alts
constructs case alternatives expression.