module Control.Monad.Bayes.Helpers (
W,
hoistW,
P,
hoistP,
S,
hoistS,
F,
hoistF,
T,
hoistT,
hoistWF,
hoistSP,
hoistSTP
) where
import Control.Monad.Bayes.Weighted as Weighted
import Control.Monad.Bayes.Population as Pop
import Control.Monad.Bayes.Sequential as Seq
import Control.Monad.Bayes.Free as Free
import Control.Monad.Bayes.Traced as Tr
type W = Weighted
type P = Population
type S = Sequential
type F = FreeSampler
type T = Traced
hoistW :: (forall x. m x -> n x) -> W m a -> W n a
hoistW = Weighted.hoist
hoistP :: (Monad m, Monad n)
=> (forall x. m x -> n x) -> P m a -> P n a
hoistP = Pop.hoist
hoistS :: (forall x. m x -> m x) -> S m a -> S m a
hoistS = Seq.hoistFirst
hoistF :: (Monad m, Monad n) => (forall x. m x -> n x) -> F m a -> F n a
hoistF = Free.hoist
hoistWF :: (Monad m, Monad n)
=> (forall x. m x -> n x)
-> W (F m) a -> W (F n) a
hoistWF m = hoistW $ hoistF m
hoistSP :: Monad m
=> (forall x. m x -> m x)
-> S (P m) a -> S (P m) a
hoistSP m = hoistS $ hoistP m
hoistSTP :: Monad m
=> (forall x. m x -> m x)
-> S (T (P m)) a -> S (T (P m)) a
hoistSTP m = hoistS $ hoistT $ hoistP m