{-# LANGUAGE BangPatterns #-}
module Main where
import Stochastic.Generator
import Stochastic.Uniform
import Stochastic.Distributions
import System.Environment
import System.IO
import Data.IORef
main :: IO ()
main = do
[count] <- getArgs
let n = read count :: Integer
let g = xorshift128plus 42
let g' = dropGen (next) n g
iog <- liftGen (next) g'
x <- nextIO iog
putStrLn (show x)
-- ref <- newIORef g
-- invert $ step n (f ref)
return ()
myUncons (x:xs) = (x, xs)
step :: Integer -> IO Int -> [IO Int]
step 0 _ = []
step n io = (io:(step (n-1) io))
invert :: [IO a] -> IO [a]
invert [] = return []
invert (io:ios) = do
x <- io
xs <- invert ios
return (x:xs)
f :: IORef UniformRandom -> IO Int
f ref = do
g <- readIORef ref
let (x, g') = next g
writeIORef ref g'
return x