Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module contains the abstract syntax of Hindley-Milner types.
Synopsis
- class (Show v, Ord v) => IsVar v where
- prettyLetters :: [v]
- class HasLoc f where
- class DefLoc f where
- defLoc :: f
- data TypeF loc var r
- newtype Type loc var = Type {}
- varT :: loc -> var -> Type loc var
- conT :: loc -> var -> [Type loc var] -> Type loc var
- arrowT :: loc -> Type loc v -> Type loc v -> Type loc v
- tupleT :: loc -> [Type loc var] -> Type loc var
- listT :: loc -> Type loc var -> Type loc var
- data Typed loc v a = Typed {
- typed'type :: Type loc v
- typed'value :: a
- data SignatureF loc var r
- newtype Signature loc var = Signature {
- unSignature :: Fix (SignatureF loc var)
- forAllT :: loc -> v -> Signature loc v -> Signature loc v
- monoT :: Type loc src -> Signature loc src
- stripSignature :: Signature src var -> Type src var
- splitSignature :: Signature loc var -> ([var], Type loc var)
- typeToSignature :: (Eq loc, Ord v) => Type loc v -> Signature loc v
- getTypeVars :: (Ord var, HasTypeVars f) => f src var -> [(src, var)]
- newtype VarSet src var = VarSet {}
- differenceVarSet :: Ord var => VarSet src var -> VarSet src var -> VarSet src var
- varSetToList :: VarSet src var -> [(src, var)]
- memberVarSet :: Ord var => var -> VarSet src var -> Bool
- class HasTypeVars f where
- class LocFunctor f where
- mapLoc :: (locA -> locB) -> f locA var -> f locB var
- setLoc :: LocFunctor f => loc -> f locA v -> f loc v
- class TypeFunctor f where
- extractFunType :: Type loc var -> ([Type loc var], Type loc var)
- extractArrow :: Type loc var -> Maybe (Type loc var, Type loc var)
- isMono :: Type loc var -> Bool
- isPoly :: Type loc var -> Bool
Documentation
class (Show v, Ord v) => IsVar v where Source #
Functions we need for variables to do type-inference.
prettyLetters :: [v] Source #
Canonical leters for pretty output
Instances
IsVar Int Source # | |
Defined in Type.Check.HM.Type prettyLetters :: [Int] Source # | |
IsVar String Source # | |
Defined in Type.Check.HM.Type prettyLetters :: [String] Source # | |
IsVar Text Source # | |
Defined in Type.Check.HM.Type prettyLetters :: [Text] Source # |
Class to get source code location.
Type class for default location
Monomorphic types.
Type functor. Arguments are
loc
- source code locationsvar
- variable namer
- recursion
There are only two requried constructors: VarT
and ConT
other constructors are used for convenience of pretty-printing the type.
VarT loc var | Variables |
ConT loc var [r] | type constant with list of arguments |
ArrowT loc r r | Special case of ConT that is rendered as -> |
TupleT loc [r] | Special case of ConT that is rendered as (,,,) |
ListT loc r | Special case of ConT that is rendered as [a] |
Instances
Functor (TypeF loc var) Source # | |
Foldable (TypeF loc var) Source # | |
Defined in Type.Check.HM.Type fold :: Monoid m => TypeF loc var m -> m # foldMap :: Monoid m => (a -> m) -> TypeF loc var a -> m # foldMap' :: Monoid m => (a -> m) -> TypeF loc var a -> m # foldr :: (a -> b -> b) -> b -> TypeF loc var a -> b # foldr' :: (a -> b -> b) -> b -> TypeF loc var a -> b # foldl :: (b -> a -> b) -> b -> TypeF loc var a -> b # foldl' :: (b -> a -> b) -> b -> TypeF loc var a -> b # foldr1 :: (a -> a -> a) -> TypeF loc var a -> a # foldl1 :: (a -> a -> a) -> TypeF loc var a -> a # toList :: TypeF loc var a -> [a] # null :: TypeF loc var a -> Bool # length :: TypeF loc var a -> Int # elem :: Eq a => a -> TypeF loc var a -> Bool # maximum :: Ord a => TypeF loc var a -> a # minimum :: Ord a => TypeF loc var a -> a # | |
Traversable (TypeF loc var) Source # | |
Defined in Type.Check.HM.Type | |
(Eq loc, Eq var) => Eq1 (TypeF loc var) Source # | |
(Ord loc, Ord var) => Ord1 (TypeF loc var) Source # | |
Defined in Type.Check.HM.Type | |
(Show loc, Show var) => Show1 (TypeF loc var) Source # | |
(Eq loc, Eq var, Eq r) => Eq (TypeF loc var r) Source # | |
(Data loc, Data var, Data r) => Data (TypeF loc var r) Source # | |
Defined in Type.Check.HM.Type gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> TypeF loc var r -> c (TypeF loc var r) # gunfold :: (forall b r0. Data b => c (b -> r0) -> c r0) -> (forall r1. r1 -> c r1) -> Constr -> c (TypeF loc var r) # toConstr :: TypeF loc var r -> Constr # dataTypeOf :: TypeF loc var r -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (TypeF loc var r)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (TypeF loc var r)) # gmapT :: (forall b. Data b => b -> b) -> TypeF loc var r -> TypeF loc var r # gmapQl :: (r0 -> r' -> r0) -> r0 -> (forall d. Data d => d -> r') -> TypeF loc var r -> r0 # gmapQr :: forall r0 r'. (r' -> r0 -> r0) -> r0 -> (forall d. Data d => d -> r') -> TypeF loc var r -> r0 # gmapQ :: (forall d. Data d => d -> u) -> TypeF loc var r -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> TypeF loc var r -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> TypeF loc var r -> m (TypeF loc var r) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> TypeF loc var r -> m (TypeF loc var r) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> TypeF loc var r -> m (TypeF loc var r) # | |
(Ord loc, Ord var, Ord r) => Ord (TypeF loc var r) Source # | |
Defined in Type.Check.HM.Type compare :: TypeF loc var r -> TypeF loc var r -> Ordering # (<) :: TypeF loc var r -> TypeF loc var r -> Bool # (<=) :: TypeF loc var r -> TypeF loc var r -> Bool # (>) :: TypeF loc var r -> TypeF loc var r -> Bool # (>=) :: TypeF loc var r -> TypeF loc var r -> Bool # max :: TypeF loc var r -> TypeF loc var r -> TypeF loc var r # min :: TypeF loc var r -> TypeF loc var r -> TypeF loc var r # | |
(Show loc, Show var, Show r) => Show (TypeF loc var r) Source # | |
Generic (TypeF loc var r) Source # | |
type Rep (TypeF loc var r) Source # | |
Defined in Type.Check.HM.Type type Rep (TypeF loc var r) = D1 ('MetaData "TypeF" "Type.Check.HM.Type" "hindley-milner-type-check-0.1.1.0-9nmtzC9RFBTLXwkiC1uZyJ" 'False) ((C1 ('MetaCons "VarT" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 loc) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 var)) :+: C1 ('MetaCons "ConT" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 loc) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 var) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [r])))) :+: (C1 ('MetaCons "ArrowT" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 loc) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 r) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 r))) :+: (C1 ('MetaCons "TupleT" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 loc) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [r])) :+: C1 ('MetaCons "ListT" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 loc) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 r))))) |
Monomorphic types.
Instances
HasTypeVars Type Source # | |
TypeFunctor Type Source # | |
LocFunctor Type Source # | |
CanApply Type Source # | |
Functor (Type a) Source # | |
(Eq loc, Eq var) => Eq (Type loc var) Source # | |
(Data loc, Data var) => Data (Type loc var) Source # | |
Defined in Type.Check.HM.Type gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Type loc var -> c (Type loc var) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Type loc var) # toConstr :: Type loc var -> Constr # dataTypeOf :: Type loc var -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Type loc var)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Type loc var)) # gmapT :: (forall b. Data b => b -> b) -> Type loc var -> Type loc var # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Type loc var -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Type loc var -> r # gmapQ :: (forall d. Data d => d -> u) -> Type loc var -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Type loc var -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Type loc var -> m (Type loc var) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Type loc var -> m (Type loc var) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Type loc var -> m (Type loc var) # | |
(Ord loc, Ord var) => Ord (Type loc var) Source # | |
Defined in Type.Check.HM.Type | |
(Show loc, Show var) => Show (Type loc var) Source # | |
Generic (Type loc var) Source # | |
(NFData loc, NFData var) => NFData (Type loc var) Source # | |
Defined in Type.Check.HM.Type | |
PrettyVar v => Pretty (Type loc v) Source # | |
Defined in Type.Check.HM.Pretty | |
PrettyVar v => Pretty (FixityCtx v (Type loc v)) Source # | |
HasLoc (Type loc v) Source # | |
type Rep (Type loc var) Source # | |
Defined in Type.Check.HM.Type | |
type Loc (Type loc v) Source # | |
Defined in Type.Check.HM.Type |
varT :: loc -> var -> Type loc var Source #
varT
loc x
constructs a type variable named x
with source code at loc
.
conT :: loc -> var -> [Type loc var] -> Type loc var Source #
conT
loc x
constructs a type constant named x
with source code at loc
.
arrowT :: loc -> Type loc v -> Type loc v -> Type loc v Source #
arrowT
loc t0 t1
constructs an arrow type from t0
to t1
with source code at loc
.
tupleT :: loc -> [Type loc var] -> Type loc var Source #
tupleT
loc ts
constructs tuple of types ts
with source code at loc
.
listT :: loc -> Type loc var -> Type loc var Source #
listT
loc t
constructs list of t
with source code at loc
.
Typed values
Values that are tagged explicitly with their type.
Typed | |
|
Instances
Functor (Typed loc v) Source # | |
Foldable (Typed loc v) Source # | |
Defined in Type.Check.HM.Type fold :: Monoid m => Typed loc v m -> m # foldMap :: Monoid m => (a -> m) -> Typed loc v a -> m # foldMap' :: Monoid m => (a -> m) -> Typed loc v a -> m # foldr :: (a -> b -> b) -> b -> Typed loc v a -> b # foldr' :: (a -> b -> b) -> b -> Typed loc v a -> b # foldl :: (b -> a -> b) -> b -> Typed loc v a -> b # foldl' :: (b -> a -> b) -> b -> Typed loc v a -> b # foldr1 :: (a -> a -> a) -> Typed loc v a -> a # foldl1 :: (a -> a -> a) -> Typed loc v a -> a # toList :: Typed loc v a -> [a] # null :: Typed loc v a -> Bool # length :: Typed loc v a -> Int # elem :: Eq a => a -> Typed loc v a -> Bool # maximum :: Ord a => Typed loc v a -> a # minimum :: Ord a => Typed loc v a -> a # | |
Traversable (Typed loc v) Source # | |
Defined in Type.Check.HM.Type | |
(Eq loc, Eq v, Eq a) => Eq (Typed loc v a) Source # | |
(Data loc, Data v, Data a) => Data (Typed loc v a) Source # | |
Defined in Type.Check.HM.Type gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Typed loc v a -> c (Typed loc v a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Typed loc v a) # toConstr :: Typed loc v a -> Constr # dataTypeOf :: Typed loc v a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Typed loc v a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Typed loc v a)) # gmapT :: (forall b. Data b => b -> b) -> Typed loc v a -> Typed loc v a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Typed loc v a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Typed loc v a -> r # gmapQ :: (forall d. Data d => d -> u) -> Typed loc v a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Typed loc v a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Typed loc v a -> m (Typed loc v a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Typed loc v a -> m (Typed loc v a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Typed loc v a -> m (Typed loc v a) # | |
(Ord loc, Ord v, Ord a) => Ord (Typed loc v a) Source # | |
Defined in Type.Check.HM.Type compare :: Typed loc v a -> Typed loc v a -> Ordering # (<) :: Typed loc v a -> Typed loc v a -> Bool # (<=) :: Typed loc v a -> Typed loc v a -> Bool # (>) :: Typed loc v a -> Typed loc v a -> Bool # (>=) :: Typed loc v a -> Typed loc v a -> Bool # | |
(Show loc, Show v, Show a) => Show (Typed loc v a) Source # | |
Polymorphic types.
data SignatureF loc var r Source #
Functor for signature is a special type that we need for type inference algorithm. We specify which variables in the type are schematic (non-free).
Instances
Functor (SignatureF loc var) Source # | |
Defined in Type.Check.HM.Type fmap :: (a -> b) -> SignatureF loc var a -> SignatureF loc var b # (<$) :: a -> SignatureF loc var b -> SignatureF loc var a # | |
Foldable (SignatureF loc var) Source # | |
Defined in Type.Check.HM.Type fold :: Monoid m => SignatureF loc var m -> m # foldMap :: Monoid m => (a -> m) -> SignatureF loc var a -> m # foldMap' :: Monoid m => (a -> m) -> SignatureF loc var a -> m # foldr :: (a -> b -> b) -> b -> SignatureF loc var a -> b # foldr' :: (a -> b -> b) -> b -> SignatureF loc var a -> b # foldl :: (b -> a -> b) -> b -> SignatureF loc var a -> b # foldl' :: (b -> a -> b) -> b -> SignatureF loc var a -> b # foldr1 :: (a -> a -> a) -> SignatureF loc var a -> a # foldl1 :: (a -> a -> a) -> SignatureF loc var a -> a # toList :: SignatureF loc var a -> [a] # null :: SignatureF loc var a -> Bool # length :: SignatureF loc var a -> Int # elem :: Eq a => a -> SignatureF loc var a -> Bool # maximum :: Ord a => SignatureF loc var a -> a # minimum :: Ord a => SignatureF loc var a -> a # sum :: Num a => SignatureF loc var a -> a # product :: Num a => SignatureF loc var a -> a # | |
Traversable (SignatureF loc var) Source # | |
Defined in Type.Check.HM.Type traverse :: Applicative f => (a -> f b) -> SignatureF loc var a -> f (SignatureF loc var b) # sequenceA :: Applicative f => SignatureF loc var (f a) -> f (SignatureF loc var a) # mapM :: Monad m => (a -> m b) -> SignatureF loc var a -> m (SignatureF loc var b) # sequence :: Monad m => SignatureF loc var (m a) -> m (SignatureF loc var a) # | |
(Eq loc, Eq var) => Eq1 (SignatureF loc var) Source # | |
Defined in Type.Check.HM.Type liftEq :: (a -> b -> Bool) -> SignatureF loc var a -> SignatureF loc var b -> Bool # | |
(Ord loc, Ord var) => Ord1 (SignatureF loc var) Source # | |
Defined in Type.Check.HM.Type liftCompare :: (a -> b -> Ordering) -> SignatureF loc var a -> SignatureF loc var b -> Ordering # | |
(Show loc, Show var) => Show1 (SignatureF loc var) Source # | |
Defined in Type.Check.HM.Type liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> SignatureF loc var a -> ShowS # liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [SignatureF loc var a] -> ShowS # | |
(Eq loc, Eq var, Eq r) => Eq (SignatureF loc var r) Source # | |
Defined in Type.Check.HM.Type (==) :: SignatureF loc var r -> SignatureF loc var r -> Bool # (/=) :: SignatureF loc var r -> SignatureF loc var r -> Bool # | |
(Data loc, Data var, Data r) => Data (SignatureF loc var r) Source # | |
Defined in Type.Check.HM.Type gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SignatureF loc var r -> c (SignatureF loc var r) # gunfold :: (forall b r0. Data b => c (b -> r0) -> c r0) -> (forall r1. r1 -> c r1) -> Constr -> c (SignatureF loc var r) # toConstr :: SignatureF loc var r -> Constr # dataTypeOf :: SignatureF loc var r -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (SignatureF loc var r)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (SignatureF loc var r)) # gmapT :: (forall b. Data b => b -> b) -> SignatureF loc var r -> SignatureF loc var r # gmapQl :: (r0 -> r' -> r0) -> r0 -> (forall d. Data d => d -> r') -> SignatureF loc var r -> r0 # gmapQr :: forall r0 r'. (r' -> r0 -> r0) -> r0 -> (forall d. Data d => d -> r') -> SignatureF loc var r -> r0 # gmapQ :: (forall d. Data d => d -> u) -> SignatureF loc var r -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> SignatureF loc var r -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> SignatureF loc var r -> m (SignatureF loc var r) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SignatureF loc var r -> m (SignatureF loc var r) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SignatureF loc var r -> m (SignatureF loc var r) # | |
(Ord loc, Ord var, Ord r) => Ord (SignatureF loc var r) Source # | |
Defined in Type.Check.HM.Type compare :: SignatureF loc var r -> SignatureF loc var r -> Ordering # (<) :: SignatureF loc var r -> SignatureF loc var r -> Bool # (<=) :: SignatureF loc var r -> SignatureF loc var r -> Bool # (>) :: SignatureF loc var r -> SignatureF loc var r -> Bool # (>=) :: SignatureF loc var r -> SignatureF loc var r -> Bool # max :: SignatureF loc var r -> SignatureF loc var r -> SignatureF loc var r # min :: SignatureF loc var r -> SignatureF loc var r -> SignatureF loc var r # | |
(Show loc, Show var, Show r) => Show (SignatureF loc var r) Source # | |
Defined in Type.Check.HM.Type showsPrec :: Int -> SignatureF loc var r -> ShowS # show :: SignatureF loc var r -> String # showList :: [SignatureF loc var r] -> ShowS # |
newtype Signature loc var Source #
Signaure is a special type that we need for type inference algorithm. We specify which variables in the type are schematic (non-free).
Signature | |
|
Instances
HasTypeVars Signature Source # | |
LocFunctor Signature Source # | |
CanApply Signature Source # | |
Functor (Signature loc) Source # | |
(Eq loc, Eq var) => Eq (Signature loc var) Source # | |
(Data loc, Data var) => Data (Signature loc var) Source # | |
Defined in Type.Check.HM.Type gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Signature loc var -> c (Signature loc var) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Signature loc var) # toConstr :: Signature loc var -> Constr # dataTypeOf :: Signature loc var -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Signature loc var)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Signature loc var)) # gmapT :: (forall b. Data b => b -> b) -> Signature loc var -> Signature loc var # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Signature loc var -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Signature loc var -> r # gmapQ :: (forall d. Data d => d -> u) -> Signature loc var -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Signature loc var -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Signature loc var -> m (Signature loc var) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Signature loc var -> m (Signature loc var) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Signature loc var -> m (Signature loc var) # | |
(Ord loc, Ord var) => Ord (Signature loc var) Source # | |
Defined in Type.Check.HM.Type compare :: Signature loc var -> Signature loc var -> Ordering # (<) :: Signature loc var -> Signature loc var -> Bool # (<=) :: Signature loc var -> Signature loc var -> Bool # (>) :: Signature loc var -> Signature loc var -> Bool # (>=) :: Signature loc var -> Signature loc var -> Bool # max :: Signature loc var -> Signature loc var -> Signature loc var # min :: Signature loc var -> Signature loc var -> Signature loc var # | |
(Show loc, Show var) => Show (Signature loc var) Source # | |
PrettyVar v => Pretty (Signature loc v) Source # | |
Defined in Type.Check.HM.Pretty | |
PrettyVar v => Pretty (FixityCtx v (Signature loc v)) Source # | |
HasLoc (Signature loc var) Source # | |
type Loc (Signature loc var) Source # | |
Defined in Type.Check.HM.Type |
forAllT :: loc -> v -> Signature loc v -> Signature loc v Source #
forAllT
x t
universally quantifies x
in t
.
monoT :: Type loc src -> Signature loc src Source #
monoT
t
lifts a monomorophic type t
to a polymorphic one.
stripSignature :: Signature src var -> Type src var Source #
Removes all information on variables in the type.
it gets the thing that we store in constructor MonoT
.
splitSignature :: Signature loc var -> ([var], Type loc var) Source #
Separates type variables from type definition.
typeToSignature :: (Eq loc, Ord v) => Type loc v -> Signature loc v Source #
Converts simple type to signature with all free variables set to schematic.
getTypeVars :: (Ord var, HasTypeVars f) => f src var -> [(src, var)] Source #
Reads all type-variables.
newtype VarSet src var Source #
Set with information on source code locations. We use it to keep the source code locations for variables.
differenceVarSet :: Ord var => VarSet src var -> VarSet src var -> VarSet src var Source #
difference
for VarSet
's
varSetToList :: VarSet src var -> [(src, var)] Source #
Converts varset to list.
memberVarSet :: Ord var => var -> VarSet src var -> Bool Source #
Checks membership of the item in the varset.
class HasTypeVars f where Source #
The class of types which have free type variables.
tyVars :: Ord var => f src var -> VarSet src var Source #
tyVars
t
calculates the set of free type variables in t
.
tyVarsInOrder :: (Eq src, Ord var) => f src var -> [(var, src)] Source #
tyVarsInOrder
t
is like tyVars
t
, except that the type
variables are returned in the order in which they are encountered.
Instances
class LocFunctor f where Source #
Mapping over source code locations. It's like functor but for source code locations.
Instances
LocFunctor Type Source # | |
LocFunctor Signature Source # | |
LocFunctor TypeError Source # | |
LocFunctor (Term prim) Source # | |
LocFunctor (TyTerm prim) Source # | |
setLoc :: LocFunctor f => loc -> f locA v -> f loc v Source #
Sets the source code location to given value for all expressions in the functor.
class TypeFunctor f where Source #
Mapps over all types that are contained in the value
Instances
TypeFunctor Type Source # | |
TypeFunctor (Term prim) Source # | |
TypeFunctor (TyTerm prim) Source # | |
extractFunType :: Type loc var -> ([Type loc var], Type loc var) Source #
If underlying type is a function with several arguments it extracts its list of arguments and result type.