Safe Haskell | None |
---|---|
Language | Haskell2010 |
This implements the model environments that users must provide upon running a model; such environments assign traces of values to the "observable variables" (random variables which can be conditioned against) of a model.
Synopsis
- data ObsVar (x :: Symbol) where
- ObsVar :: KnownSymbol x => ObsVar x
- varToStr :: forall x. ObsVar x -> String
- data Assign x a = x := a
- data Env (env :: [Assign Symbol *]) where
- (<:>) :: UniqueKey x env ~ True => Assign (ObsVar x) [a] -> Env env -> Env ((x := a) ': env)
- nil :: Env '[]
- class (FindElem x env, LookupType x env ~ a) => Observable env x a where
- type family Observables env (ks :: [Symbol]) a :: Constraint where ...
- type family UniqueKey x env where ...
- type family LookupType x env where ...
Observable variable
data ObsVar (x :: Symbol) where Source #
Containers for observable variables
ObsVar :: KnownSymbol x => ObsVar x |
varToStr :: forall x. ObsVar x -> String Source #
Convert an observable variable from a type-level string to a value-level string
Model environment
Assign or associate a variable x
with a value of type a
x := a |
Instances
FindElem x2 env => FindElem (x2 :: k) ((x' := a2) ': env :: [Assign x1 a1]) Source # | |
FindElem (x2 :: x1) ((x2 := a2) ': env :: [Assign x1 a1]) Source # | |
(KnownSymbol x, Show a, Show (Env env)) => Show (Env ((x := a) ': env)) Source # | |
Show (Env ('[] :: [Assign Symbol Type])) Source # | |
FromSTrace ('[] :: [Assign Symbol Type]) Source # | |
(UniqueKey x env ~ 'True, KnownSymbol x, Eq a, Member a PrimVal, FromSTrace env) => FromSTrace ((x := a) ': env) Source # | |
data Env (env :: [Assign Symbol *]) where Source #
A model environment assigning traces (lists) of observed values to observable
variables i.e. the type Env ((x := a) : env)
indicates x
is assigned a value
of type [a]
.
(<:>) :: UniqueKey x env ~ True => Assign (ObsVar x) [a] -> Env env -> Env ((x := a) ': env) infixr 5 Source #
Prepend a variable assignment to a model environment
class (FindElem x env, LookupType x env ~ a) => Observable env x a where Source #
Specifies that an environment Env env
has an observable variable x
whose observed values are of type a
type family Observables env (ks :: [Symbol]) a :: Constraint where ... Source #
For each observable variable x
in xs
, construct the constraint Observable env x a
Observables env (x ': xs) a = (Observable env x a, Observables env xs a) | |
Observables env '[] a = () |
type family UniqueKey x env where ... Source #
Check whether an observable variable x
is unique in model environment env
type family LookupType x env where ... Source #
Retrieve the type of an observable variable x
from an environment env
LookupType x ((x := a) ': env) = a | |
LookupType x ((x' := a) ': env) = LookupType x env |