Safe Haskell | None |
---|---|
Language | Haskell98 |
Functions and instances relating to unification
- freshType :: MonadState CheckState m => m Type
- solveType :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Int -> Type -> m ()
- substituteType :: Substitution -> Type -> Type
- unifyTypes :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
- unifyRows :: forall m. (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m ()
- unifiesWith :: Type -> Type -> Bool
- replaceVarWithUnknown :: MonadState CheckState m => String -> Type -> m Type
- replaceTypeWildcards :: (Functor m, Applicative m, MonadWriter MultipleErrors m, MonadState CheckState m) => Type -> m Type
- varIfUnknown :: Type -> Type
Documentation
freshType :: MonadState CheckState m => m Type Source
Generate a fresh type variable
solveType :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Int -> Type -> m () Source
Update the substitution to solve a type constraint
substituteType :: Substitution -> Type -> Type Source
Apply a substitution to a type
unifyTypes :: (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m () Source
Unify two types, updating the current substitution
unifyRows :: forall m. (Functor m, Applicative m, MonadError MultipleErrors m, MonadState CheckState m) => Type -> Type -> m () Source
Unify two rows, updating the current substitution
Common labels are first identified, and unified. Remaining labels and types are unified with a trailing row unification variable, if appropriate, otherwise leftover labels result in a unification error.
unifiesWith :: Type -> Type -> Bool Source
Check that two types unify
replaceVarWithUnknown :: MonadState CheckState m => String -> Type -> m Type Source
Replace a single type variable with a new unification variable
replaceTypeWildcards :: (Functor m, Applicative m, MonadWriter MultipleErrors m, MonadState CheckState m) => Type -> m Type Source
Replace type wildcards with unknowns
varIfUnknown :: Type -> Type Source
Replace outermost unsolved unification variables with named type variables