@@ -0,0 +1,79 @@
1+{-# LANGUAGE TypeApplications #-}
2+{-# LANGUAGE FlexibleContexts #-}
3+{-# LANGUAGE DataKinds #-}
4+
5+module Main (main) where
6+
7+import Criterion.Main
8+import qualified Control.Monad.Reader as M
9+import qualified Control.Monad.Ether.Reader as E
10+import qualified Control.Lens as L
11+
12+readerSummatorMTL_flat_9
13+ :: M.MonadReader (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
14+ => m String
15+readerSummatorMTL_flat_9 = do
16+ concat <$> sequenceA
17+ [ show <$> L.view L._1
18+ , show <$> L.view L._2
19+ , show <$> L.view L._3
20+ , show <$> L.view L._4
21+ , show <$> L.view L._5
22+ , show <$> L.view L._6
23+ , show <$> L.view L._7
24+ , show <$> L.view L._8
25+ , show <$> L.view L._9 ]
26+{-# NOINLINE readerSummatorMTL_flat_9 #-}
27+
28+run_readerSummatorMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
29+run_readerSummatorMTL_flat_9
30+ (a1, a2, a3, a4, a5, a6, a7, a8, a9)
31+ = M.runReader readerSummatorMTL_flat_9
32+ $ (a9, a8, a7, a6, a5, a4, a3, a2, a1)
33+
34+readerSummatorEther_sep_9
35+ :: ( E.MonadReader 1 Int m
36+ , E.MonadReader 2 Int m
37+ , E.MonadReader 3 Int m
38+ , E.MonadReader 4 Int m
39+ , E.MonadReader 5 Int m
40+ , E.MonadReader 6 Int m
41+ , E.MonadReader 7 Int m
42+ , E.MonadReader 8 Int m
43+ , E.MonadReader 9 Int m )
44+ => m String
45+readerSummatorEther_sep_9 = concat <$> sequenceA
46+ [ show <$> E.ask @1
47+ , show <$> E.ask @2
48+ , show <$> E.ask @3
49+ , show <$> E.ask @4
50+ , show <$> E.ask @5
51+ , show <$> E.ask @6
52+ , show <$> E.ask @7
53+ , show <$> E.ask @8
54+ , show <$> E.ask @9 ]
55+{-# NOINLINE readerSummatorEther_sep_9 #-}
56+
57+run_readerSummatorEther_nested_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
58+run_readerSummatorEther_nested_9
59+ (a1, a2, a3, a4, a5, a6, a7, a8, a9)
60+ = flip (E.runReader @9) a1
61+ . flip (E.runReaderT @8) a2
62+ . flip (E.runReaderT @7) a3
63+ . flip (E.runReaderT @6) a4
64+ . flip (E.runReaderT @5) a5
65+ . flip (E.runReaderT @4) a6
66+ . flip (E.runReaderT @3) a7
67+ . flip (E.runReaderT @2) a8
68+ . flip (E.runReaderT @1) a9
69+ $ readerSummatorEther_sep_9
70+
71+tuple_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int)
72+tuple_9 = (1, -2, 3, -4, 5, -6, 7, -8, 9)
73+
74+main :: IO ()
75+main = do
76+ defaultMain
77+ [ bench "readerSummatorMTL_flat_9" $ nf run_readerSummatorMTL_flat_9 tuple_9
78+ , bench "readerSummatorEther_nested_9" $ nf run_readerSummatorEther_nested_9 tuple_9
79+ ]