unison-parser-typechecker-0.0.0
Safe HaskellSafe-Inferred
LanguageHaskell2010

Unison.KindInference.Solve.Monad

Synopsis

Documentation

newtype Solve v loc a Source #

Constructors

Solve 

Fields

Instances

Instances details
MonadReader Env (Solve v loc) Source # 
Instance details

Defined in Unison.KindInference.Solve.Monad

Methods

ask :: Solve v loc Env #

local :: (Env -> Env) -> Solve v loc a -> Solve v loc a #

reader :: (Env -> a) -> Solve v loc a #

MonadFix (Solve v loc) Source # 
Instance details

Defined in Unison.KindInference.Solve.Monad

Methods

mfix :: (a -> Solve v loc a) -> Solve v loc a #

Applicative (Solve v loc) Source # 
Instance details

Defined in Unison.KindInference.Solve.Monad

Methods

pure :: a -> Solve v loc a #

(<*>) :: Solve v loc (a -> b) -> Solve v loc a -> Solve v loc b #

liftA2 :: (a -> b -> c) -> Solve v loc a -> Solve v loc b -> Solve v loc c #

(*>) :: Solve v loc a -> Solve v loc b -> Solve v loc b #

(<*) :: Solve v loc a -> Solve v loc b -> Solve v loc a #

Functor (Solve v loc) Source # 
Instance details

Defined in Unison.KindInference.Solve.Monad

Methods

fmap :: (a -> b) -> Solve v loc a -> Solve v loc b #

(<$) :: a -> Solve v loc b -> Solve v loc a #

Monad (Solve v loc) Source # 
Instance details

Defined in Unison.KindInference.Solve.Monad

Methods

(>>=) :: Solve v loc a -> (a -> Solve v loc b) -> Solve v loc b #

(>>) :: Solve v loc a -> Solve v loc b -> Solve v loc b #

return :: a -> Solve v loc a #

MonadState (SolveState v loc) (Solve v loc) Source # 
Instance details

Defined in Unison.KindInference.Solve.Monad

Methods

get :: Solve v loc (SolveState v loc) #

put :: SolveState v loc -> Solve v loc () #

state :: (SolveState v loc -> (a, SolveState v loc)) -> Solve v loc a #

data Env Source #

Constructors

Env 

Instances

Instances details
MonadReader Env (Solve v loc) Source # 
Instance details

Defined in Unison.KindInference.Solve.Monad

Methods

ask :: Solve v loc Env #

local :: (Env -> Env) -> Solve v loc a -> Solve v loc a #

reader :: (Env -> a) -> Solve v loc a #

data SolveState v loc Source #

The SolveState holds all kind constraints gathered for each type. For example, after processing data and effect decls the typeMap will hold entries for every decl, and looking up the corresponding UVar in constraints will return its kind.

The other fields, unifVars and newUnifVars, are relevant when interleaving constraint generation with solving. Constraint generation needs to create fresh unification variables, so it needs the set of bound unification variables from unifVars. newUnifVars holds the uvars that are candidates for kind defaulting (see defaultUnconstrainedVars).

Constructors

SolveState 

Fields

Instances

Instances details
MonadState (SolveState v loc) (Solve v loc) Source # 
Instance details

Defined in Unison.KindInference.Solve.Monad

Methods

get :: Solve v loc (SolveState v loc) #

put :: SolveState v loc -> Solve v loc () #

state :: (SolveState v loc -> (a, SolveState v loc)) -> Solve v loc a #

data Descriptor v loc Source #

Constraints associated with a unification variable

Constructors

Descriptor 

Fields

type ConstraintMap v loc = UFMap (UVar v loc) (Descriptor v loc) Source #

run :: Env -> SolveState v loc -> Solve v loc a -> (a, SolveState v loc) Source #

Runner for the Solve monad

emptyState :: SolveState v loc Source #

Initial solve state

find :: Var v => UVar v loc -> Solve v loc (Maybe (Constraint (UVar v loc) v loc)) Source #

Lookup the constraints associated with a unification variable

genStateL :: Lens' (SolveState v loc) (GenState v loc) Source #

Helper for inteleaving constraint generation and solving

runGen :: Var v => Gen v loc a -> Solve v loc a Source #

Interleave constraint generation into constraint solving

addUnconstrainedVar :: Var v => UVar v loc -> Solve v loc () Source #

Add a unification variable to the constarint mapping with no constraints. This is done on uvars created during constraint generation to initialize the new uvars (see runGen).