Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
.
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 #