Copyright | (c) Sam Raker 2016 |
---|---|
License | BSD3 |
Maintainer | sam.raker@gmail.com |
Stability | experimental |
Portability | POSIX (FlexibleContexts, TemplateHaskell) |
Safe Haskell | None |
Language | Haskell2010 |
Generate Markov sequences from vectors.
The main entry points are:
buildProc
creates a MarkovProcess
from a vector of training elements,
a starting element, and a StdGen
runUntil
runs a MarkovProcess
until a termination condition is met, and
returns the resulting sequence
- data MarkovMap a = MarkovMap {}
- data MarkovProcess m a = MarkovProcess {}
- buildMap :: Eq a => Vector a -> MarkovMap a
- buildProc :: (Eq a, MonadPlus m) => Vector a -> a -> StdGen -> MarkovProcess m a
- buildProcIO :: (Eq a, MonadPlus m) => Vector a -> a -> IO (MarkovProcess m a)
- runMarkov :: (Eq a, MonadPlus m) => MarkovProcess m a -> (m a, MarkovProcess m a)
- runUntil :: (Eq a, MonadPlus m) => (m a -> Bool) -> MarkovProcess m a -> m a
Data structures
Map of frequencies
Map of frequencies
Complete process
data MarkovProcess m a Source #
State
-compatible wrapper around a trained
MarkovMap
, which includes a StdGen
and the most
recently-generated element, or the starting element if the process hasn't
been run yet
Construction helpers
buildProc :: (Eq a, MonadPlus m) => Vector a -> a -> StdGen -> MarkovProcess m a Source #
Build a MarkovProcess from a vector of elements, a starting element, and a source of randomness NOTE: the starting element should be a member of the training vector
buildProcIO :: (Eq a, MonadPlus m) => Vector a -> a -> IO (MarkovProcess m a) Source #
Build a MarkovProcess from a vector of elements and a starting element, using
getStdGen
for randomness
Run processes
runMarkov :: (Eq a, MonadPlus m) => MarkovProcess m a -> (m a, MarkovProcess m a) Source #
Run a MarkovProcess once, generating a new element that is appended to the accumulator