| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Model
Contents
Description
An algebraic effect embedding of probabilistic models.
Synopsis
- newtype Model env es a = Model {}
- handleCore :: (Member Observe es, Member Sample es) => Env env -> Model env (ObsReader env ': (Dist ': es)) a -> Prog es a
- bernoulli :: forall env es x. Observable env x Bool => Double -> ObsVar x -> Model env es Bool
- bernoulli' :: Double -> Model env es Bool
- beta :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double
- beta' :: Double -> Double -> Model env es Double
- binomial :: forall env es x. Observable env x Int => Int -> Double -> ObsVar x -> Model env es Int
- binomial' :: Int -> Double -> Model env es Int
- categorical :: forall env es a x. (Eq a, Show a, Member a PrimVal, Observable env x a) => [(a, Double)] -> ObsVar x -> Model env es a
- categorical' :: (Eq a, Show a, Member a PrimVal) => [(a, Double)] -> Model env es a
- cauchy :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double
- cauchy' :: Double -> Double -> Model env es Double
- halfCauchy :: forall env es x. Observable env x Double => Double -> ObsVar x -> Model env es Double
- halfCauchy' :: Double -> Model env es Double
- deterministic :: forall env es a x. (Eq a, Show a, Member a PrimVal, Observable env x a) => a -> ObsVar x -> Model env es a
- deterministic' :: (Eq a, Show a, Member a PrimVal) => a -> Model env es a
- dirichlet :: forall env es x. Observable env x [Double] => [Double] -> ObsVar x -> Model env es [Double]
- dirichlet' :: [Double] -> Model env es [Double]
- discrete :: forall env es x. Observable env x Int => [Double] -> ObsVar x -> Model env es Int
- discrete' :: [Double] -> Model env es Int
- gamma :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double
- gamma' :: Double -> Double -> Model env es Double
- normal :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double
- normal' :: Double -> Double -> Model env es Double
- halfNormal :: forall env es x. Observable env x Double => Double -> ObsVar x -> Model env es Double
- halfNormal' :: Double -> Model env es Double
- poisson :: forall env es x. Observable env x Int => Double -> ObsVar x -> Model env es Int
- poisson' :: Double -> Model env es Int
- uniform :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double
- uniform' :: Double -> Double -> Model env es Double
Documentation
newtype Model env es a Source #
Models are parameterised by:
1) a model environment env containing random variables that can be provided observed values
2) an effect signature es of the possible effects a model can invoke
3) an output type a of values that the model generates.
A model initially consists of (at least) two effects: Dist for calling primitive distributions
and ObsReader env for reading from env.
Instances
| Monad (Model env es) Source # | |
| Functor (Model env es) Source # | |
| Applicative (Model env es) Source # | |
handleCore :: (Member Observe es, Member Sample es) => Env env -> Model env (ObsReader env ': (Dist ': es)) a -> Prog es a Source #
The initial handler for models, specialising a model under a certain
environment to produce a probabilistic program consisting of Sample and Observe operations.
Distribution smart constructors
Smart constructors for calling primitive distribution operations inside models, where each distribution comes with a primed and an unprimed variant.
An unprimed distribution takes the standard distribution parameters as well as an observable variable. This lets one later provide observed values for that variable to be conditioned against:
exampleModel :: Observable env "b" Bool => Model env es Bool exampleModel = bernoulli 0.5 #b
A primed distribution takes no observable variable and so cannot be conditioned against; this will always representing sampling from that distribution:
exampleModel' :: Model env es Bool exampleModel' = bernoulli' 0.5
bernoulli :: forall env es x. Observable env x Bool => Double -> ObsVar x -> Model env es Bool Source #
beta :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #
binomial :: forall env es x. Observable env x Int => Int -> Double -> ObsVar x -> Model env es Int Source #
categorical :: forall env es a x. (Eq a, Show a, Member a PrimVal, Observable env x a) => [(a, Double)] -> ObsVar x -> Model env es a Source #
cauchy :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #
halfCauchy :: forall env es x. Observable env x Double => Double -> ObsVar x -> Model env es Double Source #
deterministic :: forall env es a x. (Eq a, Show a, Member a PrimVal, Observable env x a) => a -> ObsVar x -> Model env es a Source #
dirichlet :: forall env es x. Observable env x [Double] => [Double] -> ObsVar x -> Model env es [Double] Source #
discrete :: forall env es x. Observable env x Int => [Double] -> ObsVar x -> Model env es Int Source #
gamma :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #
normal :: forall env es x. Observable env x Double => Double -> Double -> ObsVar x -> Model env es Double Source #
halfNormal :: forall env es x. Observable env x Double => Double -> ObsVar x -> Model env es Double Source #