{-# LANGUAGE PackageImports #-}
module Main (main) where
import Control.Monad
import Gauge
import qualified "fused-effects-mwc-random" Control.Carrier.Random.Lifted as MWC
import qualified "fused-effects-random" Control.Effect.Random as System
mwc :: Int -> IO [Double]
mwc n = MWC.runRandomSystem (replicateM n MWC.uniform)
system :: Int -> IO [Double]
system n = System.evalRandomIO (replicateM n System.getRandom)
main :: IO ()
main = defaultMain [ bench "System.Random (generate 1 double)" (nfAppIO system 1)
, bench "MWC.Random (generate 1 double)" (nfAppIO mwc 1)
, bench "System.Random (generate 10 double)" (nfAppIO system 10)
, bench "MWC.Random (generate 10 double)" (nfAppIO mwc 10)
, bench "System.Random (generate 100 double)" (nfAppIO system 100)
, bench "MWC.Random (generate 100 double)" (nfAppIO mwc 100)
]