traq
Safe HaskellSafe-Inferred
LanguageHaskell2010

Traq.ProtoLang.Eval

Synopsis

Evaluating Basic Expressions

type ProgramState size = Context (Value size) #

The deterministic state of the program

class HasProgramState p where #

Methods

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

Instances

Instances details
HasProgramState (ProgramState size) # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

_state :: size0 ~ SizeType (ProgramState size) => Lens' (ProgramState size) (ProgramState size0) #

evalBasicExpr :: (MonadReader env m, HasProgramState env, size ~ SizeType env, size ~ SizeT) => BasicExpr size -> m (Value size) #

Evaluations

runProgram :: forall ext prec m. (Evaluatable ext SizeT prec, EvalReqs SizeT prec, m ~ EvaluationMonad prec) => Program ext -> FunInterpCtx SizeT -> [Value SizeT] -> m [Value SizeT] #

Entry-point: run the program (i.e. last function)

Values

defaultV :: forall size. size ~ SizeT => VarType size -> Value size #

default value of a given type

validateValueType :: forall size. size ~ SizeT => VarType size -> Value size -> 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 size => VarType size -> size #

Size of the value set of a given type.

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

Bitsize

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

Set of all values of a given type

Types and Monad

type EvaluationMonad prec = ExpMonad prec #

Base probability monad to evaluate the program.

class (EvalReqs size prec, size ~ SizeType ext, prec ~ PrecType ext) => Evaluatable ext size prec | ext -> size prec where #

Primitives that support evaluation.

Minimal complete definition

Nothing

Methods

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

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

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

EvalReqs SizeT prec => Evaluatable (TreeSearch SizeT prec) SizeT prec # 
Instance details

Defined in Traq.Primitives.TreeSearch

Methods

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

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

Defined in Traq.ProtoLang.Eval

Methods

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

type EvalReqs size prec = (size ~ SizeT, ProbType prec, RVType prec prec, Fractional prec) #

Constraints to be satisfied to support evaluation.

type family EvalArgs f ext #

Instances

Instances details
type EvalArgs Expr ext # 
Instance details

Defined in Traq.ProtoLang.Eval

type EvalArgs FunBody ext # 
Instance details

Defined in Traq.ProtoLang.Eval

type EvalArgs FunBody ext = [Value (SizeType ext)]
type EvalArgs NamedFunDef ext # 
Instance details

Defined in Traq.ProtoLang.Eval

type EvalArgs NamedFunDef ext = [Value (SizeType ext)]
type EvalArgs Program ext # 
Instance details

Defined in Traq.ProtoLang.Eval

type EvalArgs Program ext = [Value (SizeType ext)]
type EvalArgs Stmt ext # 
Instance details

Defined in Traq.ProtoLang.Eval

eval1 :: forall ext size prec m. (Eval1 f, Evaluatable ext size prec, m ~ Evaluator ext) => f ext -> EvalArgs f ext -> m (EvalRets f ext) #

Evaluation

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

Inject runtime data into a program

type FunInterpCtx size = Map Ident (FunInterp size) #

A mapping of data intepretations

class HasFunInterpCtx p where #

Methods

_funInterpCtx :: size ~ SizeType p => Lens' p (FunInterpCtx size) #

Instances

Instances details
HasFunInterpCtx (EvaluationEnv ext) # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

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

HasFunInterpCtx (FunInterpCtx size) # 
Instance details

Defined in Traq.ProtoLang.Eval

Methods

_funInterpCtx :: size0 ~ SizeType (FunInterpCtx size) => Lens' (FunInterpCtx size) (FunInterpCtx size0) #

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 :: size ~ SizeType (EvaluationEnv ext) => Lens' (EvaluationEnv ext) (FunInterpCtx size) #

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 evaluation monad (i.e. no state)