| 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