| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Traq.ProtoLang.Eval
Synopsis
- type ProgramState sizeT = Context (Value sizeT)
- class HasProgramState p where
- _state :: sizeT ~ SizeType p => Lens' p (ProgramState sizeT)
- evalBasicExpr :: (MonadReader env m, HasProgramState env, sizeT ~ SizeType env, sizeT ~ SizeT) => BasicExpr sizeT -> m (Value sizeT)
- execStmt :: forall ext precT m ext'. (EvalReqs SizeT precT, Evaluatable ext' SizeT precT, Evaluatable ext SizeT precT, m ~ Executor ext') => Stmt ext -> m ()
- evalFun :: forall ext sizeT precT m. (Evaluatable ext sizeT precT, m ~ Evaluator ext, SizeType ext ~ sizeT, PrecType ext ~ precT, EvalReqs sizeT precT) => [Value SizeT] -> NamedFunDef ext -> m [Value SizeT]
- runProgram :: forall ext precT m. (Evaluatable ext SizeT precT, EvalReqs SizeT precT, m ~ EvaluationMonad precT) => Program ext -> FunInterpCtx SizeT -> [Value SizeT] -> m [Value SizeT]
- defaultV :: forall sizeT. sizeT ~ SizeT => VarType sizeT -> Value sizeT
- validateValueType :: forall sizeT. sizeT ~ SizeT => VarType sizeT -> Value sizeT -> Bool
- class CoerceValue t where
- safeToValue :: t -> Maybe (Value SizeT)
- safeFromValue :: Value SizeT -> Maybe t
- toValue :: CoerceValue t => t -> Value SizeT
- fromValue :: CoerceValue t => Value SizeT -> t
- valueToBool :: Value SizeT -> Bool
- domainSize :: Integral sizeT => VarType sizeT -> sizeT
- bitsize :: Num size => VarType size -> Maybe size
- domain :: Integral sizeT => VarType sizeT -> [Value sizeT]
- type EvaluationMonad precT = ExpMonad precT
- class (EvalReqs sizeT precT, sizeT ~ SizeType ext, precT ~ PrecType ext) => Evaluatable ext sizeT precT | ext -> sizeT precT where
- eval :: forall ext' m. (Evaluatable ext' sizeT precT, m ~ Evaluator ext', SizeType ext' ~ sizeT, PrecType ext' ~ precT) => ext -> ProgramState sizeT -> m [Value sizeT]
- type EvalReqs sizeT precT = (sizeT ~ SizeT, ProbType precT, RVType precT precT, Fractional precT)
- type FunInterp sizeT = [Value sizeT] -> [Value sizeT]
- type FunInterpCtx sizeT = Context (FunInterp sizeT)
- class HasFunInterpCtx p where
- _funInterpCtx :: sizeT ~ SizeType p => Lens' p (FunInterpCtx sizeT)
- data EvaluationEnv ext
- class HasEvaluationEnv p ext | p -> ext where
- _evaluationEnv :: Lens' p (EvaluationEnv ext)
- type Evaluator ext = ReaderT (EvaluationEnv ext) (EvaluationMonad (PrecType ext))
- type ExecutionState sizeT = ProgramState sizeT
- type Executor ext = StateT (ExecutionState (SizeType ext)) (Evaluator ext)
Evaluating Basic Expressions
type ProgramState sizeT = Context (Value sizeT) #
The deterministic state of the program
class HasProgramState p where #
Instances
| HasProgramState (ProgramState sizeT) # | |
Defined in Traq.ProtoLang.Eval Methods _state :: sizeT0 ~ SizeType (ProgramState sizeT) => Lens' (ProgramState sizeT) (ProgramState sizeT0) # | |
evalBasicExpr :: (MonadReader env m, HasProgramState env, sizeT ~ SizeType env, sizeT ~ SizeT) => BasicExpr sizeT -> m (Value sizeT) #
Evaluations
execStmt :: forall ext precT m ext'. (EvalReqs SizeT precT, Evaluatable ext' SizeT precT, Evaluatable ext SizeT precT, m ~ Executor ext') => Stmt ext -> m () #
Execute a statement, updating the state. TODO unify this as a class instance, after unifying evaluation
runProgram :: forall ext precT m. (Evaluatable ext SizeT precT, EvalReqs SizeT precT, m ~ EvaluationMonad precT) => Program ext -> FunInterpCtx SizeT -> [Value SizeT] -> m [Value SizeT] #
Entry-point: run the program (i.e. last function)
Values
defaultV :: forall sizeT. sizeT ~ SizeT => VarType sizeT -> Value sizeT #
default value of a given type
validateValueType :: forall sizeT. sizeT ~ SizeT => VarType sizeT -> Value sizeT -> Bool #
Check if a given runtime value is of a given type.
class CoerceValue t where #
Coerce a haskell value into our value type.
Methods
safeToValue :: t -> Maybe (Value SizeT) #
safely convert a runtime value to Value.
safeFromValue :: Value SizeT -> Maybe t #
safely convert a Value to a runtime value.
Instances
| CoerceValue Bool # | |
Defined in Traq.ProtoLang.Eval | |
| CoerceValue Int # | |
Defined in Traq.ProtoLang.Eval | |
| CoerceValue a => CoerceValue [a] # | |
Defined in Traq.ProtoLang.Eval | |
toValue :: CoerceValue t => t -> Value SizeT #
Convert an input into Value
fromValue :: CoerceValue t => Value SizeT -> t #
Convert a Value to the given type.
valueToBool :: Value SizeT -> Bool #
domainSize :: Integral sizeT => VarType sizeT -> sizeT #
Size of the value set of a given type.
Types and Monad
type EvaluationMonad precT = ExpMonad precT #
Base probability monad to evaluate the program.
class (EvalReqs sizeT precT, sizeT ~ SizeType ext, precT ~ PrecType ext) => Evaluatable ext sizeT precT | ext -> sizeT precT where #
Primitives that support evaluation.
Minimal complete definition
Nothing
Methods
eval :: forall ext' m. (Evaluatable ext' sizeT precT, m ~ Evaluator ext', SizeType ext' ~ sizeT, PrecType ext' ~ precT) => ext -> ProgramState sizeT -> m [Value sizeT] #
Instances
| Evaluatable ext size prec => Evaluatable (AnnFailProb ext) size prec # | |
Defined in Traq.Analysis.Annotate.Prelude Methods eval :: (Evaluatable ext' size prec, m ~ Evaluator ext', SizeType ext' ~ size, PrecType ext' ~ prec) => AnnFailProb ext -> ProgramState size -> m [Value size] # | |
| (EvalPrim prim size prec, EvalReqs size prec) => Evaluatable (Primitive prim) size prec # | |
Defined in Traq.Primitives.Class | |
| Evaluatable ext sizeT precT => Evaluatable (Expr ext) sizeT precT # | |
Defined in Traq.ProtoLang.Eval | |
| Evaluatable ext sizeT precT => Evaluatable (NamedFunDef ext) sizeT precT # | |
Defined in Traq.ProtoLang.Eval Methods eval :: (Evaluatable ext' sizeT precT, m ~ Evaluator ext', SizeType ext' ~ sizeT, PrecType ext' ~ precT) => NamedFunDef ext -> ProgramState sizeT -> m [Value sizeT] # | |
| EvalReqs SizeT precT => Evaluatable (TreeSearch SizeT precT) SizeT precT # | |
Defined in Traq.Primitives.TreeSearch | |
| EvalReqs SizeT precT => Evaluatable (Core SizeT precT) SizeT precT # | |
type EvalReqs sizeT precT = (sizeT ~ SizeT, ProbType precT, RVType precT precT, Fractional precT) #
Constraints to be satisfied to support evaluation.
Evaluation
type FunInterpCtx sizeT = Context (FunInterp sizeT) #
A mapping of data Subtypings
class HasFunInterpCtx p where #
Methods
_funInterpCtx :: sizeT ~ SizeType p => Lens' p (FunInterpCtx sizeT) #
Instances
| HasFunInterpCtx (EvaluationEnv ext) # | |
Defined in Traq.ProtoLang.Eval Methods _funInterpCtx :: sizeT ~ SizeType (EvaluationEnv ext) => Lens' (EvaluationEnv ext) (FunInterpCtx sizeT) # | |
| HasFunInterpCtx (FunInterpCtx sizeT) # | |
Defined in Traq.ProtoLang.Eval Methods _funInterpCtx :: sizeT0 ~ SizeType (FunInterpCtx sizeT) => Lens' (FunInterpCtx sizeT) (FunInterpCtx sizeT0) # | |
data EvaluationEnv ext #
Environment for evaluation
Instances
class HasEvaluationEnv p ext | p -> ext where #
Methods
_evaluationEnv :: Lens' p (EvaluationEnv ext) #
Instances
| HasEvaluationEnv (EvaluationEnv ext) ext # | |
Defined in Traq.ProtoLang.Eval Methods _evaluationEnv :: Lens' (EvaluationEnv ext) (EvaluationEnv ext) # | |
type Evaluator ext = ReaderT (EvaluationEnv ext) (EvaluationMonad (PrecType ext)) #
Non-deterministic Execution Monad (i.e. no state)
Execution (state updating)
type ExecutionState sizeT = ProgramState sizeT #