liquidhaskell-0.8.10.2: Liquid Types for Haskell
Safe HaskellNone
LanguageHaskell98

Language.Haskell.Liquid.Synthesize.Monad

Synopsis

Documentation

type SSEnv = HashMap Symbol (SpecType, Var) Source #

Synthesis Monad ----------------------------------------------------------

type SSDecrTerm = [(Var, [Var])] Source #

data SState Source #

Constructors

SState 

Fields

locally :: SM a -> SM a Source #

evalSM :: SM a -> Context -> SSEnv -> SState -> IO a Source #

addsEnv :: [(Var, SpecType)] -> SM () Source #

addsEmem :: [(Var, SpecType)] -> SM () Source #

addDecrTerm :: Var -> [Var] -> SM () Source #

lookupAll :: Var -> [Var] -> SSDecrTerm -> SM () Source #

thisReplace :: Int -> a -> [a] -> [a] Source #

structuralCheck :: [CoreExpr] -> SM [CoreExpr] Source #

Entry point.

liftCG0 :: (CGEnv -> CG CGEnv) -> SM () Source #

liftCG :: CG a -> SM a Source #

withIncrDepth :: Monoid a => SM a -> SM a Source #

initExprMem :: SSEnv -> ExprMemory Source #

Initializes ExprMemory structure. 1. Transforms refinement types to conventional (Haskell) types. 2. All Depths are initialized to 0.

applyTy :: [Type] -> CoreExpr -> Maybe CoreExpr Source #

Used for instantiation: Applies types to an expression. > The result does not have forall. Nothing as a result suggests that there are more types than foralls in the expression.

fixEMem :: SpecType -> SM () Source #

Instantiation based on current goal-type.

instantiateTL :: SM (Type, CoreExpr) Source #

Instantiate the top-level variable.

apply :: [Var] -> CoreExpr -> Maybe CoreExpr Source #

Applies type variables (1st argument) to an expression. The expression is guaranteed to have the same level of parametricity (same number of forall) as the length of the 1st argument. > The result has zero forall.