-- Generates samples of value for display with visual.R
import Control.Monad

import System.Directory  (createDirectoryIfMissing,setCurrentDirectory)
import System.IO

import qualified System.Random.MWC               as MWC
import qualified System.Random.MWC.Distributions as MWC


dumpSample :: Show a => Int -> FilePath -> IO a -> IO ()
dumpSample n fname gen =
  withFile fname WriteMode $ \h -> 
    replicateM_ n (hPutStrLn h . show =<< gen)
  
main :: IO ()
main = MWC.withSystemRandom $ \g -> do
  let n   = 10000
      dir = "distr"
  createDirectoryIfMissing True dir
  setCurrentDirectory           dir
  -- Normal
  dumpSample n "normal-0-1" $ MWC.normal 0 1 g
  dumpSample n "normal-1-2" $ MWC.normal 1 2 g
  -- Gamma
  dumpSample n "gamma-1.0-1.0" $ MWC.gamma  1.0 1.0 g
  dumpSample n "gamma-0.3-0.4" $ MWC.gamma  0.3 0.4 g
  dumpSample n "gamma-0.3-3.0" $ MWC.gamma  0.3 3.0 g
  dumpSample n "gamma-3.0-0.4" $ MWC.gamma  3.0 0.4 g
  dumpSample n "gamma-3.0-3.0" $ MWC.gamma  3.0 3.0 g
  -- Exponential
  dumpSample n "exponential-1" $ MWC.exponential 1 g
  dumpSample n "exponential-3" $ MWC.exponential 3 g
