flat-mcmc

Painless, efficient, general-purpose sampling from continuous distributions.
Log | Files | Refs | README | LICENSE

commit 7470e0f7e95de07413526ba9dfdf5947776b0b4f
parent 7a61ebeed932f8ae22abba5810f3e2365fc671c3
Author: Jared Tobin <jared@jtobin.ca>
Date:   Tue, 20 Dec 2016 07:42:16 +1300

Generalize base monad.

Diffstat:
MCHANGELOG | 7+++++--
Mflat-mcmc.cabal | 2+-
Mlib/Numeric/MCMC/Flat.hs | 13++++++++++---
Mstack-travis.yaml | 4++--
Mstack.yaml | 2+-
5 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -1,7 +1,10 @@ # Changelog +- 1.5.0 (2016-12-20) + * Generalize base monad. + - 1.4.0 (2016-12-01) - * Export the 'particle' and 'ensemble' helper aliases to make it a little - less burdensome to create an origin for a Markov chain. + * Export the 'particle' and 'ensemble' helper aliases to make it a little + less burdensome to create an origin for a Markov chain. diff --git a/flat-mcmc.cabal b/flat-mcmc.cabal @@ -1,5 +1,5 @@ name: flat-mcmc -version: 1.4.2 +version: 1.5.0 synopsis: Painless general-purpose sampling. homepage: https://github.com/jtobin/flat-mcmc license: MIT diff --git a/lib/Numeric/MCMC/Flat.hs b/lib/Numeric/MCMC/Flat.hs @@ -42,10 +42,11 @@ module Numeric.MCMC.Flat ( ) where import Control.Monad (replicateM) +import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Par (NFData) import Control.Monad.Par.Combinator (parMap) import Control.Monad.Par.Scheds.Sparks hiding (get) -import Control.Monad.Primitive (PrimMonad, PrimState, RealWorld) +import Control.Monad.Primitive (PrimMonad, PrimState) import Control.Monad.Trans.State.Strict (get, put, execStateT) import Data.Monoid import Data.Sampling.Types as Sampling.Types hiding (Chain(..)) @@ -206,11 +207,17 @@ chain = loop where -- -1.1655594505975082,1.1655594505975082 -- 0.5466534497342876,-0.9615123448709006 -- 0.7049046915549257,0.7049046915549257 -mcmc :: Int -> Ensemble -> (Particle -> Double) -> Gen RealWorld -> IO () +mcmc + :: (MonadIO m, PrimMonad m) + => Int + -> Ensemble + -> (Particle -> Double) + -> Gen (PrimState m) + -> m () mcmc n chainPosition target gen = runEffect $ chain Chain {..} gen >-> Pipes.take n - >-> Pipes.mapM_ (T.putStrLn . render) + >-> Pipes.mapM_ (liftIO . T.putStrLn . render) where chainTarget = Target target Nothing {-# INLINE mcmc #-} diff --git a/stack-travis.yaml b/stack-travis.yaml @@ -2,8 +2,8 @@ flags: {} packages: - '.' extra-deps: [] -resolver: lts-5.2 -compiler: ghc-7.10.3 +resolver: lts-7.14 +compiler: ghc-8.0.1 system-ghc: false install-ghc: true diff --git a/stack.yaml b/stack.yaml @@ -2,4 +2,4 @@ flags: {} packages: - '.' extra-deps: [] -resolver: lts-7.9 +resolver: lts-7.14