diff --git a/HMarkov.cabal b/HMarkov.cabal
--- a/HMarkov.cabal
+++ b/HMarkov.cabal
@@ -1,5 +1,5 @@
 name:                HMarkov
-version:             1.0.0.3
+version:             1.0.1.0
 synopsis:            Markov-generated sequences
 description:         Sequences generated by trained Markov models
 homepage:            https://github.com/swizzard/HMarkov#readme
@@ -14,17 +14,29 @@
 
 library
   hs-source-dirs:      src
-  exposed-modules:     Data.Markov.HMarkov, Data.Markov.HMarkov.Helpers
-  build-depends:       base >= 4.7 && < 5, lens, mtl,
-                       random, vector
+  exposed-modules:     Data.Markov.HMarkov
+  other-modules:       Data.Markov.HMarkov.Helpers
+  build-depends:       base >= 4.7 && < 5
+                     , lens
+                     , mtl
+                     , random
+                     , vector
   default-language:    Haskell2010
 
 test-suite HMarkov-test
   type:                exitcode-stdio-1.0
-  hs-source-dirs:      test
+  hs-source-dirs:      test, src
   main-is:             Spec.hs
-  build-depends:       base, HMarkov, QuickCheck, tasty, tasty-hunit,
-                       tasty-quickcheck, random, vector
+  build-depends:       base >= 4.7 && < 5
+                     , HMarkov
+                     , lens
+                     , mtl
+                     , QuickCheck
+                     , random
+                     , tasty
+                     , tasty-hunit
+                     , tasty-quickcheck
+                     , vector
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
   default-language:    Haskell2010
 
diff --git a/src/Data/Markov/HMarkov.hs b/src/Data/Markov/HMarkov.hs
--- a/src/Data/Markov/HMarkov.hs
+++ b/src/Data/Markov/HMarkov.hs
@@ -59,6 +59,11 @@
 buildProc :: (Eq a, MonadPlus m) => V.Vector a -> a -> StdGen -> MarkovProcess m a
 buildProc xs x gen = MarkovProcess (buildMap xs) gen x mzero
 
+-- | Build a MarkovProcess from a vector of elements and a starting element, using
+-- 'getStdGen' for randomness
+buildProcIO :: (Eq a, MonadPlus m) => V.Vector a -> a -> IO (MarkovProcess m a)
+buildProcIO xs x = fmap (buildProc xs x) getStdGen
+
 -- | Run a MarkovProcess once, generating a new element that is appended to the
 -- accumulator
 runMarkov :: (Eq a, MonadPlus m) => MarkovProcess m a -> (m a, MarkovProcess m a)
