Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Type checker building blocks that do not involve unification.
Synopsis
- checkTypeExp :: MonadTypeChecker m => TypeExp Name -> m (TypeExp VName, StructType, Liftedness)
- checkTypeDecl :: MonadTypeChecker m => TypeDeclBase NoInfo Name -> m (TypeDeclBase Info VName, Liftedness)
- unifyTypesU :: (Monoid als, ArrayDim dim) => (Uniqueness -> Uniqueness -> Maybe Uniqueness) -> TypeBase dim als -> TypeBase dim als -> Maybe (TypeBase dim als)
- subtypeOf :: ArrayDim dim => TypeBase dim as1 -> TypeBase dim as2 -> Bool
- subuniqueOf :: Uniqueness -> Uniqueness -> Bool
- checkForDuplicateNames :: MonadTypeChecker m => [UncheckedPattern] -> m ()
- checkTypeParams :: MonadTypeChecker m => [TypeParamBase Name] -> ([TypeParamBase VName] -> m a) -> m a
- typeParamToArg :: TypeParam -> StructTypeArg
- data TypeSub
- = TypeSub TypeBinding
- | DimSub (DimDecl VName)
- type TypeSubs = Map VName TypeSub
- substituteTypes :: Monoid als => TypeSubs -> TypeBase (DimDecl VName) als -> TypeBase (DimDecl VName) als
- data Subst t
- class Substitutable a where
- applySubst :: (VName -> Maybe (Subst StructType)) -> a -> a
- substTypesAny :: Monoid as => (VName -> Maybe (Subst (TypeBase (DimDecl VName) as))) -> TypeBase (DimDecl VName) as -> TypeBase (DimDecl VName) as
Documentation
checkTypeExp :: MonadTypeChecker m => TypeExp Name -> m (TypeExp VName, StructType, Liftedness) Source #
checkTypeDecl :: MonadTypeChecker m => TypeDeclBase NoInfo Name -> m (TypeDeclBase Info VName, Liftedness) Source #
Use checkTypeExp
to check a type declaration.
unifyTypesU :: (Monoid als, ArrayDim dim) => (Uniqueness -> Uniqueness -> Maybe Uniqueness) -> TypeBase dim als -> TypeBase dim als -> Maybe (TypeBase dim als) Source #
unifyTypes uf t1 t2
attempts to unify t1
and t2
. If
unification cannot happen, Nothing
is returned, otherwise a type
that combines the aliasing of t1
and t2
is returned.
Uniqueness is unified with uf
.
subtypeOf :: ArrayDim dim => TypeBase dim as1 -> TypeBase dim as2 -> Bool Source #
x `subtypeOf` y
is true if x
is a subtype of y
(or equal to
y
), meaning x
is valid whenever y
is.
subuniqueOf :: Uniqueness -> Uniqueness -> Bool Source #
x
is true if subuniqueOf
yx
is not less unique than y
.
checkForDuplicateNames :: MonadTypeChecker m => [UncheckedPattern] -> m () Source #
Check for duplication of names inside a pattern group. Produces a description of all names used in the pattern group.
checkTypeParams :: MonadTypeChecker m => [TypeParamBase Name] -> ([TypeParamBase VName] -> m a) -> m a Source #
checkTypeParams ps m
checks the type parameters ps
, then
invokes the continuation m
with the checked parameters, while
extending the monadic name map with ps
.
typeParamToArg :: TypeParam -> StructTypeArg Source #
Construct a type argument corresponding to a type parameter.
A substitution for when using substituteTypes
.
substituteTypes :: Monoid als => TypeSubs -> TypeBase (DimDecl VName) als -> TypeBase (DimDecl VName) als Source #
Apply type substitutions to the given type.
A type substituion may be a substitution or a yet-unknown substitution (but which is certainly an overloaded primitive type!). The latter is used to remove aliases from types that are yet-unknown but that we know cannot carry aliases (see issue #682).
class Substitutable a where Source #
Class of types which allow for substitution of types with no annotations for type variable names.
applySubst :: (VName -> Maybe (Subst StructType)) -> a -> a Source #
Instances
Substitutable Pattern Source # | |
Defined in Language.Futhark.TypeChecker.Types applySubst :: (VName -> Maybe (Subst StructType)) -> Pattern -> Pattern Source # | |
Substitutable d => Substitutable (ShapeDecl d) Source # | |
Defined in Language.Futhark.TypeChecker.Types applySubst :: (VName -> Maybe (Subst StructType)) -> ShapeDecl d -> ShapeDecl d Source # | |
Substitutable (DimDecl VName) Source # | |
Defined in Language.Futhark.TypeChecker.Types | |
Substitutable (TypeBase (DimDecl VName) ()) Source # | |
Defined in Language.Futhark.TypeChecker.Types | |
Substitutable (TypeBase (DimDecl VName) Aliasing) Source # | |