| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Type.Check.HM.Term
Description
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 Methods 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.
Constructors
| 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 Methods 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 Methods 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 Methods 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
Constructors
| CaseAlt | |
Fields
| |
Instances
| Functor (CaseAlt loc v) Source # | |
| Foldable (CaseAlt loc v) Source # | |
Defined in Type.Check.HM.Term Methods 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 Methods traverse :: Applicative f => (a -> f b) -> CaseAlt loc v a -> f (CaseAlt loc v b) # sequenceA :: Applicative f => CaseAlt loc v (f a) -> f (CaseAlt loc v a) # mapM :: Monad m => (a -> m b) -> CaseAlt loc v a -> m (CaseAlt loc v b) # sequence :: Monad m => CaseAlt loc v (m a) -> m (CaseAlt loc v a) # | |
| (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 Methods 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 ...
Constructors
| Bind | |
Instances
| Functor (Bind loc var) Source # | |
| Foldable (Bind loc var) Source # | |
Defined in Type.Check.HM.Term Methods 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 Methods 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.