hindley-milner-type-check-0.1.1.0: Type inference for Hindley-Milner based languages
Safe HaskellNone
LanguageHaskell2010

Type.Check.HM.TyTerm

Description

This module contains type annotations for terms of the language.

Synopsis

Documentation

data Ann note f a Source #

Type to annotate nodes of AST. We use it for type annotations.

Constructors

Ann 

Fields

Instances

Instances details
Functor f => Functor (Ann note f) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

fmap :: (a -> b) -> Ann note f a -> Ann note f b #

(<$) :: a -> Ann note f b -> Ann note f a #

Foldable f => Foldable (Ann note f) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

fold :: Monoid m => Ann note f m -> m #

foldMap :: Monoid m => (a -> m) -> Ann note f a -> m #

foldMap' :: Monoid m => (a -> m) -> Ann note f a -> m #

foldr :: (a -> b -> b) -> b -> Ann note f a -> b #

foldr' :: (a -> b -> b) -> b -> Ann note f a -> b #

foldl :: (b -> a -> b) -> b -> Ann note f a -> b #

foldl' :: (b -> a -> b) -> b -> Ann note f a -> b #

foldr1 :: (a -> a -> a) -> Ann note f a -> a #

foldl1 :: (a -> a -> a) -> Ann note f a -> a #

toList :: Ann note f a -> [a] #

null :: Ann note f a -> Bool #

length :: Ann note f a -> Int #

elem :: Eq a => a -> Ann note f a -> Bool #

maximum :: Ord a => Ann note f a -> a #

minimum :: Ord a => Ann note f a -> a #

sum :: Num a => Ann note f a -> a #

product :: Num a => Ann note f a -> a #

Traversable f => Traversable (Ann note f) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

traverse :: Applicative f0 => (a -> f0 b) -> Ann note f a -> f0 (Ann note f b) #

sequenceA :: Applicative f0 => Ann note f (f0 a) -> f0 (Ann note f a) #

mapM :: Monad m => (a -> m b) -> Ann note f a -> m (Ann note f b) #

sequence :: Monad m => Ann note f (m a) -> m (Ann note f a) #

(Eq note, Eq1 f) => Eq1 (Ann note f) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

liftEq :: (a -> b -> Bool) -> Ann note f a -> Ann note f b -> Bool #

(Ord note, Ord1 f) => Ord1 (Ann note f) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

liftCompare :: (a -> b -> Ordering) -> Ann note f a -> Ann note f b -> Ordering #

(Show note, Show1 f) => Show1 (Ann note f) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Ann note f a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Ann note f a] -> ShowS #

(Eq note, Eq (f a)) => Eq (Ann note f a) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

(==) :: Ann note f a -> Ann note f a -> Bool #

(/=) :: Ann note f a -> Ann note f a -> Bool #

(Show note, Show (f a)) => Show (Ann note f a) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

showsPrec :: Int -> Ann note f a -> ShowS #

show :: Ann note f a -> String #

showList :: [Ann note f a] -> ShowS #

newtype TyTerm prim loc v Source #

Terms with type annotations for all subexpressions.

Constructors

TyTerm 

Fields

Instances

Instances details
HasTypeVars (TyTerm prim) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

tyVars :: Ord var => TyTerm prim src var -> VarSet src var Source #

tyVarsInOrder :: (Eq src, Ord var) => TyTerm prim src var -> [(var, src)] Source #

TypeFunctor (TyTerm prim) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

mapType :: (Type loc var -> Type loc var) -> TyTerm prim loc var -> TyTerm prim loc var Source #

LocFunctor (TyTerm prim) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

mapLoc :: (locA -> locB) -> TyTerm prim locA var -> TyTerm prim locB var Source #

CanApply (TyTerm prim) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

apply :: Ord v => Subst loc v -> TyTerm prim loc v -> TyTerm prim loc v Source #

(Eq loc, Eq v, Eq prim) => Eq (TyTerm prim loc v) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

(==) :: TyTerm prim loc v -> TyTerm prim loc v -> Bool #

(/=) :: TyTerm prim loc v -> TyTerm prim loc v -> Bool #

(Show loc, Show v, Show prim) => Show (TyTerm prim loc v) Source # 
Instance details

Defined in Type.Check.HM.TyTerm

Methods

showsPrec :: Int -> TyTerm prim loc v -> ShowS #

show :: TyTerm prim loc v -> String #

showList :: [TyTerm prim loc v] -> ShowS #

termType :: TyTerm prim loc v -> Type loc v Source #

termSignature :: (Ord v, Eq loc) => TyTerm prim loc v -> Signature loc v Source #

tyVarE :: Type loc var -> loc -> var -> TyTerm prim loc var Source #

varE loc x constructs a variable whose name is x with source code at loc.

tyPrimE :: Type loc var -> loc -> prim -> TyTerm prim loc var Source #

varE loc x constructs a variable whose name is x with source code at loc.

tyAppE :: Type loc v -> loc -> TyTerm prim loc v -> TyTerm prim loc v -> TyTerm prim loc v Source #

appE loc a b constructs an application of a to b with source code at loc.

tyLamE :: Type loc v -> loc -> v -> TyTerm prim loc v -> TyTerm prim loc v Source #

lamE loc x e constructs an abstraction of x over e with source code at loc.

tyLetE :: Type loc v -> loc -> Bind loc v (TyTerm prim loc v) -> TyTerm prim loc v -> TyTerm prim loc v Source #

letE loc binds e constructs a binding of binds in e with source code at loc. No recursive bindings.

tyLetRecE :: Type loc v -> loc -> [Bind loc v (TyTerm prim loc v)] -> TyTerm prim loc v -> TyTerm prim loc v Source #

letRecE loc binds e constructs a recursive binding of binds in e with source code at loc.

tyAssertTypeE :: loc -> TyTerm prim loc v -> Type loc v -> TyTerm prim loc v Source #

assertTypeE loc term ty constructs assertion of the type ty to term.

tyCaseE :: Type loc v -> loc -> TyTerm prim loc v -> [CaseAlt loc v (TyTerm prim loc v)] -> TyTerm prim loc v Source #

caseE loc expr alts constructs case alternatives expression.

tyConstrE :: loc -> Type loc v -> v -> TyTerm prim loc v Source #

constrE loc ty tag arity constructs constructor tag expression.

tyBottomE :: Type loc v -> loc -> TyTerm prim loc v Source #

bottomE loc constructs bottom value.

mapType :: TypeFunctor f => (Type loc var -> Type loc var) -> f loc var -> f loc var Source #