ether-0.5.0.0: bench/Bench.hs
{-# OPTIONS -fno-warn-partial-type-signatures #-}
module Main (main) where
import Control.DeepSeq
import qualified Control.Lens as L
import qualified Control.Monad.Reader as M
import qualified Control.Monad.State as M
import Criterion.Main
import Ether
id' :: a -> a
id' = id
{-# NOINLINE id' #-}
readerCombinerMTL_flat_9
:: M.MonadReader (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
=> m ()
readerCombinerMTL_flat_9 = do
rnf <$> sequenceA
[ L.view L._1
, L.view L._2
, L.view L._3
, L.view L._4
, L.view L._5
, L.view L._6
, L.view L._7
, L.view L._8
, L.view L._9 ]
{-# NOINLINE readerCombinerMTL_flat_9 #-}
stateCombinerMTL_flat_9
:: M.MonadState (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
=> m ()
stateCombinerMTL_flat_9 = do
M.modify (L.over L._1 id')
M.modify (L.over L._2 id')
M.modify (L.over L._3 id')
M.modify (L.over L._4 id')
M.modify (L.over L._5 id')
M.modify (L.over L._6 id')
M.modify (L.over L._7 id')
M.modify (L.over L._8 id')
M.modify (L.over L._9 id')
rnf <$> sequenceA
[ L.use L._1
, L.use L._2
, L.use L._3
, L.use L._4
, L.use L._5
, L.use L._6
, L.use L._7
, L.use L._8
, L.use L._9 ]
{-# NOINLINE stateCombinerMTL_flat_9 #-}
run_readerCombinerMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
run_readerCombinerMTL_flat_9
(a1, a2, a3, a4, a5, a6, a7, a8, a9) =
M.runReader readerCombinerMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
run_stateCombinerMTL_flat_9 ::
(Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
((), (Int, Int, Int, Int, Int, Int, Int, Int, Int))
run_stateCombinerMTL_flat_9
(a1, a2, a3, a4, a5, a6, a7, a8, a9) =
M.runState stateCombinerMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
readerCombinerEther_sep_9
:: ( MonadReader 1 Int m
, MonadReader 2 Int m
, MonadReader 3 Int m
, MonadReader 4 Int m
, MonadReader 5 Int m
, MonadReader 6 Int m
, MonadReader 7 Int m
, MonadReader 8 Int m
, MonadReader 9 Int m )
=> m ()
readerCombinerEther_sep_9 = rnf <$> sequenceA
[ ask @1
, ask @2
, ask @3
, ask @4
, ask @5
, ask @6
, ask @7
, ask @8
, ask @9 ]
{-# NOINLINE readerCombinerEther_sep_9 #-}
stateCombinerEther_sep_9
:: ( MonadState 1 Int m
, MonadState 2 Int m
, MonadState 3 Int m
, MonadState 4 Int m
, MonadState 5 Int m
, MonadState 6 Int m
, MonadState 7 Int m
, MonadState 8 Int m
, MonadState 9 Int m )
=> m ()
stateCombinerEther_sep_9 = do
modify @1 id'
modify @2 id'
modify @3 id'
modify @4 id'
modify @5 id'
modify @6 id'
modify @7 id'
modify @8 id'
modify @9 id'
rnf <$> sequenceA
[ get @1
, get @2
, get @3
, get @4
, get @5
, get @6
, get @7
, get @8
, get @9 ]
{-# NOINLINE stateCombinerEther_sep_9 #-}
run_readerCombinerEther_nested_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
run_readerCombinerEther_nested_9
(a1, a2, a3, a4, a5, a6, a7, a8, a9)
= flip (runReader @9) a1
. flip (runReaderT @8) a2
. flip (runReaderT @7) a3
. flip (runReaderT @6) a4
. flip (runReaderT @5) a5
. flip (runReaderT @4) a6
. flip (runReaderT @3) a7
. flip (runReaderT @2) a8
. flip (runReaderT @1) a9
$ readerCombinerEther_sep_9
run_readerCombinerEther_flatten_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
run_readerCombinerEther_flatten_9
(a1, a2, a3, a4, a5, a6, a7, a8, a9)
=
runReaders
readerCombinerEther_sep_9
( Tagged @1 a9,
Tagged @2 a8,
Tagged @3 a7,
Tagged @4 a6,
Tagged @5 a5,
Tagged @6 a4,
Tagged @7 a3,
Tagged @8 a2,
Tagged @9 a1 )
run_readerCombinerEther_flattenhalf_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
run_readerCombinerEther_flattenhalf_9
(a1, a2, a3, a4, a5, a6, a7, a8, a9) =
flip runReaders
( Tagged @1 a9,
Tagged @2 a8,
Tagged @3 a7,
Tagged @4 a6 ) .
flip runReadersT
( Tagged @5 a5,
Tagged @6 a4,
Tagged @7 a3,
Tagged @8 a2,
Tagged @9 a1 ) $
readerCombinerEther_sep_9
run_stateCombinerEther_flatten_9 ::
(Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
((), _)
run_stateCombinerEther_flatten_9
(a1, a2, a3, a4, a5, a6, a7, a8, a9)
=
runStates
stateCombinerEther_sep_9
( Tagged @1 a9,
Tagged @2 a8,
Tagged @3 a7,
Tagged @4 a6,
Tagged @5 a5,
Tagged @6 a4,
Tagged @7 a3,
Tagged @8 a2,
Tagged @9 a1 )
tuple_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int)
tuple_9 = (1, -2, 3, -4, 5, -6, 7, -8, 9)
main :: IO ()
main = do
defaultMain
[ bench "readerCombinerMTL_flat_9" $ nf run_readerCombinerMTL_flat_9 tuple_9
, bench "readerCombinerEther_nested_9" $ nf run_readerCombinerEther_nested_9 tuple_9
, bench "readerCombinerEther_flatten_9" $ nf run_readerCombinerEther_flatten_9 tuple_9
, bench "readerCombinerEther_flattenhalf_9" $
nf run_readerCombinerEther_flattenhalf_9 tuple_9
, bench "stateCombinerMTL_flat_9" $ nf run_stateCombinerMTL_flat_9 tuple_9
, bench "stateCombinerEther_flatten_9" $ nf run_stateCombinerEther_flatten_9 tuple_9
]