module Main (main) where
import MuchAdo
import NoAdo
import Criterion.Main
import Control.DeepSeq
import GHC.TypeLits
import Numeric.Sized.WordOfSize
instance KnownNat n => NFData (WordOfSize n)
main :: IO ()
main =
defaultMain
[ env (pure ([1 .. 6], 8)) $
\ ~(xs,n) ->
bgroup
"probabilistic inference map"
[ bench "Applicative rewriting, Final encoding" $ whnf (diceAdoFinal n) xs
, bench "Applicative rewriting, Initial encoding" $ whnf (diceAdoInitial n) xs
, bench "Applicative rewriting, Constrained encoding" $ whnf (diceAdoConstrained n) xs
, bench "Applicative rewriting, Codensity encoding" $ whnf (diceAdoCodensity n) xs
, bench "No rewriting" $ whnf (diceNoAdo n) xs]
, env (pure [1 .. 5]) $
\xs ->
bgroup
"set"
[ bench "Applicative rewriting, Final encoding" $ whnf sumThriceAdoFinal xs
, bench "Applicative rewriting, Initial encoding" $ whnf sumThriceAdoInitial xs
, bench "Applicative rewriting, Constrained encoding" $ whnf sumThriceAdoConstrained xs
, bench "Applicative rewriting, Codensity encoding" $ whnf sumThriceAdoCodensity xs
, bench "No rewriting" $ whnf sumThriceNoAdo xs]
, env (pure ([1 .. 5], 30)) $
\ ~(xs,n) ->
bgroup
"probabilistic inference vect"
[ bench "Applicative rewriting, Initial encoding" $ whnf (diceVectAdoInitial n) xs
, bench "Applicative rewriting Codensity encoding" $ whnf (diceVectAdoCodensity n) xs
, bench "No rewriting" $ whnf (diceVectNoAdo n) xs]]