prob-fx-0.1.0.2: A library for modular probabilistic modelling
Safe HaskellNone
LanguageHaskell2010

Prog

Description

An encoding for algebraic effects, based on the freer monad.

Synopsis

Effectful program

data Prog es a where Source #

A program that returns a value of type a and can call operations that belong to some effect e in signature es; this represents a syntax tree whose nodes are operations and leaves are pure values.

Constructors

Val 

Fields

  • :: a

    pure value

  • -> Prog es a
     
Op 

Fields

  • :: EffectSum es x

    operation belonging to some effect in es

  • -> (x -> Prog es a)

    continuation from the result of the operation

  • -> Prog es a
     

Instances

Instances details
Monad (Prog es) Source # 
Instance details

Defined in Prog

Methods

(>>=) :: Prog es a -> (a -> Prog es b) -> Prog es b #

(>>) :: Prog es a -> Prog es b -> Prog es b #

return :: a -> Prog es a #

Functor (Prog es) Source # 
Instance details

Defined in Prog

Methods

fmap :: (a -> b) -> Prog es a -> Prog es b #

(<$) :: a -> Prog es b -> Prog es a #

Applicative (Prog es) Source # 
Instance details

Defined in Prog

Methods

pure :: a -> Prog es a #

(<*>) :: Prog es (a -> b) -> Prog es a -> Prog es b #

liftA2 :: (a -> b -> c) -> Prog es a -> Prog es b -> Prog es c #

(*>) :: Prog es a -> Prog es b -> Prog es b #

(<*) :: Prog es a -> Prog es b -> Prog es a #

data EffectSum (es :: [* -> *]) (x :: *) :: * Source #

An open sum for an effect signature es, containing an operation e x where e is in es

class FindElem e es => Member (e :: * -> *) (es :: [* -> *]) where Source #

Membership of an effect e in es

Methods

inj :: e x -> EffectSum es x Source #

Inject an operation of type e x into an effect sum

prj :: EffectSum es x -> Maybe (e x) Source #

Attempt to project an operation of type e x out from an effect sum

Instances

Instances details
FindElem e es => Member e es Source # 
Instance details

Defined in Prog

Methods

inj :: e x -> EffectSum es x Source #

prj :: EffectSum es x -> Maybe (e x) Source #

e ~ e' => Member e '[e'] Source # 
Instance details

Defined in Prog

Methods

inj :: e x -> EffectSum '[e'] x Source #

prj :: EffectSum '[e'] x -> Maybe (e x) Source #

Auxiliary functions

run :: Prog '[] a -> a Source #

Run a pure computation

call :: Member e es => e x -> Prog es x Source #

Call an operation of type e x in a computation

discharge :: EffectSum (e ': es) x -> Either (EffectSum es x) (e x) Source #

Discharges an effect e from the front of an effect signature es