purescript-0.15.9: PureScript Programming Language Compiler
Safe HaskellSafe-Inferred
LanguageHaskell2010

Language.PureScript.TypeChecker.Monad

Description

Monads for type checking and type inference and associated data types

Synopsis

Documentation

data Substitution Source #

A substitution of unification variables for types.

Constructors

Substitution 

Fields

emptySubstitution :: Substitution Source #

An empty substitution

data CheckState Source #

State required for type checking

Constructors

CheckState 

Fields

emptyCheckState :: Environment -> CheckState Source #

Create an empty CheckState

type Unknown = Int Source #

Unification variables

bindNames :: MonadState CheckState m => Map (Qualified Ident) (SourceType, NameKind, NameVisibility) -> m a -> m a Source #

Temporarily bind a collection of names to values

bindTypes :: MonadState CheckState m => Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind) -> m a -> m a Source #

Temporarily bind a collection of names to types

withScopedTypeVars :: (MonadState CheckState m, MonadWriter MultipleErrors m) => ModuleName -> [(Text, SourceType)] -> m a -> m a Source #

Temporarily bind a collection of names to types

getHints :: MonadState CheckState m => m [ErrorMessageHint] Source #

These hints are added at the front, so the most nested hint occurs at the front, but the simplifier assumes the reverse order.

withTypeClassDictionaries :: MonadState CheckState m => [NamedDict] -> m a -> m a Source #

Temporarily make a collection of type class dictionaries available

getTypeClassDictionaries :: MonadState CheckState m => m (Map QualifiedBy (Map (Qualified (ProperName 'ClassName)) (Map (Qualified Ident) (NonEmpty NamedDict)))) Source #

Get the currently available map of type class dictionaries

bindLocalVariables :: MonadState CheckState m => [(SourceSpan, Ident, SourceType, NameVisibility)] -> m a -> m a Source #

Temporarily bind a collection of names to local variables

bindLocalTypeVariables :: MonadState CheckState m => ModuleName -> [(ProperName 'TypeName, SourceType)] -> m a -> m a Source #

Temporarily bind a collection of names to local type variables

makeBindingGroupVisible :: MonadState CheckState m => m () Source #

Update the visibility of all names to Defined

withBindingGroupVisible :: MonadState CheckState m => m a -> m a Source #

Update the visibility of all names to Defined in the scope of the provided action

preservingNames :: MonadState CheckState m => m a -> m a Source #

Perform an action while preserving the names from the Environment.

lookupVariable :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => Qualified Ident -> m SourceType Source #

Lookup the type of a value by name in the Environment

getVisibility :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => Qualified Ident -> m NameVisibility Source #

Lookup the visibility of a value by name in the Environment

checkVisibility :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => Qualified Ident -> m () Source #

Assert that a name is visible

lookupTypeVariable :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified (ProperName 'TypeName) -> m SourceType Source #

Lookup the kind of a type by name in the Environment

getEnv :: MonadState CheckState m => m Environment Source #

Get the current Environment

getLocalContext :: MonadState CheckState m => m Context Source #

Get locally-bound names in context, to create an error message.

putEnv :: MonadState CheckState m => Environment -> m () Source #

Update the Environment

modifyEnv :: MonadState CheckState m => (Environment -> Environment) -> m () Source #

Modify the Environment

runCheck :: Functor m => CheckState -> StateT CheckState m a -> m (a, Environment) Source #

Run a computation in the typechecking monad, failing with an error, or succeeding with a return value and the final Environment.

guardWith :: MonadError e m => e -> Bool -> m () Source #

Make an assertion, failing with an error message

withoutWarnings :: MonadWriter w m => m a -> m (a, w) Source #