Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Unison.KindInference.Solve.Monad
Synopsis
- newtype Solve v loc a = Solve {
- unSolve :: ReaderT Env (StateT (SolveState v loc) (Except (SolveError loc))) a
- data Env = Env {}
- data SolveState v loc = SolveState {
- unifVars :: !(Set Symbol)
- newUnifVars :: [UVar v loc]
- constraints :: !(UFMap (UVar v loc) (Descriptor v loc))
- typeMap :: !(Map (Type v loc) (NonEmpty (UVar v loc)))
- data SolveError loc = MissingBuiltin loc Reference
- data Descriptor v loc = Descriptor {
- descriptorConstraint :: Maybe (Constraint (UVar v loc) v loc)
- type ConstraintMap v loc = UFMap (UVar v loc) (Descriptor v loc)
- liftGen :: Gen v loc a -> Solve v loc a
- runSolve :: Env -> SolveState v loc -> Solve v loc a -> Either (SolveError loc) (a, SolveState v loc)
- emptyState :: SolveState v loc
- find :: Var v => UVar v loc -> Solve v loc (Maybe (Constraint (UVar v loc) v loc))
- runGen :: Var v => Gen v loc a -> Solve v loc a
- addUnconstrainedVar :: Var v => UVar v loc -> Solve v loc ()
Documentation
newtype Solve v loc a Source #
Constructors
Solve | |
Fields
|
Instances
MonadReader Env (Solve v loc) Source # | |
MonadFix (Solve v loc) Source # | |
Defined in Unison.KindInference.Solve.Monad | |
Applicative (Solve v loc) Source # | |
Defined in Unison.KindInference.Solve.Monad | |
Functor (Solve v loc) Source # | |
Monad (Solve v loc) Source # | |
MonadState (SolveState v loc) (Solve v loc) Source # | |
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 # |
Constructors
Env | |
Fields |
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
MonadState (SolveState v loc) (Solve v loc) Source # | |
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 SolveError loc Source #
Constructors
MissingBuiltin loc Reference |
Instances
Show loc => Show (SolveError loc) Source # | |
Defined in Unison.KindInference.Solve.Monad Methods showsPrec :: Int -> SolveError loc -> ShowS # show :: SolveError loc -> String # showList :: [SolveError loc] -> ShowS # | |
Eq loc => Eq (SolveError loc) Source # | |
Defined in Unison.KindInference.Solve.Monad Methods (==) :: SolveError loc -> SolveError loc -> Bool # (/=) :: SolveError loc -> SolveError loc -> Bool # |
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 #
runSolve :: Env -> SolveState v loc -> Solve v loc a -> Either (SolveError loc) (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