traq
Safe HaskellSafe-Inferred
LanguageHaskell2010

Traq.ProtoLang.Eval

Synopsis

Evaluating Basic Expressions

type ProgramState sizeT = Context (Value sizeT) #

The deterministic state of the program

class HasProgramState p where #

Methods

_state :: sizeT ~ SizeType p => Lens' p (ProgramState sizeT) #

Instances

Instances details
HasProgramState (ProgramState sizeT) # 
Instance details

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

evalFun #

Arguments

:: forall ext sizeT precT m. (Evaluatable ext sizeT precT, m ~ Evaluator ext, SizeType ext ~ sizeT, PrecType ext ~ precT, EvalReqs sizeT precT) 
=> [Value SizeT]

arguments

-> NamedFunDef ext

function

-> 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] #

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

Instances details
CoerceValue Bool # 
Instance details

Defined in Traq.ProtoLang.Eval

CoerceValue Int # 
Instance details

Defined in Traq.ProtoLang.Eval

CoerceValue a => CoerceValue [a] # 
Instance details

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.

domainSize :: Integral sizeT => VarType sizeT -> sizeT #

Size of the value set of a given type.

bitsize :: Num size => VarType size -> Maybe size #

Bitsize

domain :: Integral sizeT => VarType sizeT -> [Value sizeT] #

Set of all values 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] #

default eval :: forall ext' m. (Generic ext, GEvaluatable (Rep ext) sizeT precT, Evaluatable ext' sizeT precT, m ~ Evaluator ext', SizeType ext' ~ sizeT, PrecType ext' ~ precT) => ext -> ProgramState sizeT -> m [Value sizeT] #

Instances

Instances details
Evaluatable ext size prec => Evaluatable (AnnFailProb ext) size prec # 
Instance details

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 # 
Instance details

Defined in Traq.Primitives.Class

Methods

eval :: (Evaluatable ext' size prec, m ~ Evaluator ext', SizeType ext' ~ size, PrecType ext' ~ prec) => Primitive prim -> ProgramState size -> m [Value size] #

Evaluatable ext sizeT precT => Evaluatable (Expr ext) sizeT precT # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

eval :: (Evaluatable ext' sizeT precT, m ~ Evaluator ext', SizeType ext' ~ sizeT, PrecType ext' ~ precT) => Expr ext -> ProgramState sizeT -> m [Value sizeT] #

Evaluatable ext sizeT precT => Evaluatable (NamedFunDef ext) sizeT precT # 
Instance details

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 # 
Instance details

Defined in Traq.Primitives.TreeSearch

Methods

eval :: (Evaluatable ext' SizeT precT, m ~ Evaluator ext', SizeType ext' ~ SizeT, PrecType ext' ~ precT) => TreeSearch SizeT precT -> ProgramState SizeT -> m [Value SizeT] #

EvalReqs SizeT precT => Evaluatable (Core SizeT precT) SizeT precT # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

eval :: (Evaluatable ext' SizeT precT, m ~ Evaluator ext', SizeType ext' ~ SizeT, PrecType ext' ~ precT) => Core SizeT precT -> ProgramState SizeT -> m [Value SizeT] #

type EvalReqs sizeT precT = (sizeT ~ SizeT, ProbType precT, RVType precT precT, Fractional precT) #

Constraints to be satisfied to support evaluation.

Evaluation

type FunInterp sizeT = [Value sizeT] -> [Value sizeT] #

Inject runtime data into a program

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

Instances details
HasFunInterpCtx (EvaluationEnv ext) # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

_funInterpCtx :: sizeT ~ SizeType (EvaluationEnv ext) => Lens' (EvaluationEnv ext) (FunInterpCtx sizeT) #

HasFunInterpCtx (FunInterpCtx sizeT) # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

_funInterpCtx :: sizeT0 ~ SizeType (FunInterpCtx sizeT) => Lens' (FunInterpCtx sizeT) (FunInterpCtx sizeT0) #

data EvaluationEnv ext #

Environment for evaluation

Instances

Instances details
Generic (EvaluationEnv ext) # 
Instance details

Defined in Traq.ProtoLang.Eval

Associated Types

type Rep (EvaluationEnv ext) :: Type -> Type #

Methods

from :: EvaluationEnv ext -> Rep (EvaluationEnv ext) x #

to :: Rep (EvaluationEnv ext) x -> EvaluationEnv ext #

HasDefault (EvaluationEnv ext) # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

default_ :: EvaluationEnv ext #

HasFunInterpCtx (EvaluationEnv ext) # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

_funInterpCtx :: sizeT ~ SizeType (EvaluationEnv ext) => Lens' (EvaluationEnv ext) (FunInterpCtx sizeT) #

HasEvaluationEnv (EvaluationEnv ext) ext # 
Instance details

Defined in Traq.ProtoLang.Eval

HasFunCtx (EvaluationEnv ext) ext # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

_funCtx :: Lens' (EvaluationEnv ext) (FunCtx ext) #

type Rep (EvaluationEnv ext) # 
Instance details

Defined in Traq.ProtoLang.Eval

type Rep (EvaluationEnv ext) = D1 ('MetaData "EvaluationEnv" "Traq.ProtoLang.Eval" "traq-0.2.0.0-inplace" 'False) (C1 ('MetaCons "EvaluationEnv" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (FunCtx ext)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (FunInterpCtx (SizeType ext)))))
type PrecType (EvaluationEnv ext) # 
Instance details

Defined in Traq.ProtoLang.Eval

type SizeType (EvaluationEnv ext) # 
Instance details

Defined in Traq.ProtoLang.Eval

class HasEvaluationEnv p ext | p -> ext where #

Instances

Instances details
HasEvaluationEnv (EvaluationEnv ext) ext # 
Instance details

Defined in Traq.ProtoLang.Eval

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 #

type Executor ext = StateT (ExecutionState (SizeType ext)) (Evaluator ext) #

Non-deterministic Execution Monad