on master help sign in
203 lines 5.4 kB history raw
1{-# OPTIONS -fno-warn-partial-type-signatures #-}
3module Main (main) where
5import Control.DeepSeq
6import qualified Control.Lens as L
7import qualified Control.Monad.Reader as M
8import qualified Control.Monad.State as M
9import Criterion.Main
10import Ether
11import TupleInstances ()
13id' :: a -> a
14id' = id
15{-# NOINLINE id' #-}
17readerCombinerMTL_flat_9
18 :: M.MonadReader (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
19 => m ()
20readerCombinerMTL_flat_9 = do
21 rnf <$> sequenceA
22 [ L.view L._1
23 , L.view L._2
24 , L.view L._3
25 , L.view L._4
26 , L.view L._5
27 , L.view L._6
28 , L.view L._7
29 , L.view L._8
30 , L.view L._9 ]
31{-# NOINLINE readerCombinerMTL_flat_9 #-}
33stateCombinerMTL_flat_9
34 :: M.MonadState (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
35 => m ()
36stateCombinerMTL_flat_9 = do
37 M.modify (L.over L._1 id')
38 M.modify (L.over L._2 id')
39 M.modify (L.over L._3 id')
40 M.modify (L.over L._4 id')
41 M.modify (L.over L._5 id')
42 M.modify (L.over L._6 id')
43 M.modify (L.over L._7 id')
44 M.modify (L.over L._8 id')
45 M.modify (L.over L._9 id')
46 rnf <$> sequenceA
47 [ L.use L._1
48 , L.use L._2
49 , L.use L._3
50 , L.use L._4
51 , L.use L._5
52 , L.use L._6
53 , L.use L._7
54 , L.use L._8
55 , L.use L._9 ]
56{-# NOINLINE stateCombinerMTL_flat_9 #-}
58run_readerCombinerMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
59run_readerCombinerMTL_flat_9
60 (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
61 M.runReader readerCombinerMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
63run_stateCombinerMTL_flat_9 ::
64 (Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
65 ((), (Int, Int, Int, Int, Int, Int, Int, Int, Int))
66run_stateCombinerMTL_flat_9
67 (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
68 M.runState stateCombinerMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
70readerCombinerEther_sep_9
71 :: ( MonadReader 1 Int m
72 , MonadReader 2 Int m
73 , MonadReader 3 Int m
74 , MonadReader 4 Int m
75 , MonadReader 5 Int m
76 , MonadReader 6 Int m
77 , MonadReader 7 Int m
78 , MonadReader 8 Int m
79 , MonadReader 9 Int m )
80 => m ()
81readerCombinerEther_sep_9 = rnf <$> sequenceA
82 [ ask @1
83 , ask @2
84 , ask @3
85 , ask @4
86 , ask @5
87 , ask @6
88 , ask @7
89 , ask @8
90 , ask @9 ]
91{-# NOINLINE readerCombinerEther_sep_9 #-}
93stateCombinerEther_sep_9
94 :: ( MonadState 1 Int m
95 , MonadState 2 Int m
96 , MonadState 3 Int m
97 , MonadState 4 Int m
98 , MonadState 5 Int m
99 , MonadState 6 Int m
100 , MonadState 7 Int m
101 , MonadState 8 Int m
102 , MonadState 9 Int m )
103 => m ()
104stateCombinerEther_sep_9 = do
105 modify @1 id'
106 modify @2 id'
107 modify @3 id'
108 modify @4 id'
109 modify @5 id'
110 modify @6 id'
111 modify @7 id'
112 modify @8 id'
113 modify @9 id'
114 rnf <$> sequenceA
115 [ get @1
116 , get @2
117 , get @3
118 , get @4
119 , get @5
120 , get @6
121 , get @7
122 , get @8
123 , get @9 ]
124{-# NOINLINE stateCombinerEther_sep_9 #-}
126run_readerCombinerEther_nested_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
127run_readerCombinerEther_nested_9
128 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
129 = flip (runReader @9) a1
130 . flip (runReaderT @8) a2
131 . flip (runReaderT @7) a3
132 . flip (runReaderT @6) a4
133 . flip (runReaderT @5) a5
134 . flip (runReaderT @4) a6
135 . flip (runReaderT @3) a7
136 . flip (runReaderT @2) a8
137 . flip (runReaderT @1) a9
138 $ readerCombinerEther_sep_9
140run_readerCombinerEther_flatten_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
141run_readerCombinerEther_flatten_9
142 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
143 =
144 runReaders
145 readerCombinerEther_sep_9
146 ( Tagged @1 a9,
147 Tagged @2 a8,
148 Tagged @3 a7,
149 Tagged @4 a6,
150 Tagged @5 a5,
151 Tagged @6 a4,
152 Tagged @7 a3,
153 Tagged @8 a2,
154 Tagged @9 a1 )
156run_readerCombinerEther_flattenhalf_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
157run_readerCombinerEther_flattenhalf_9
158 (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
159 flip runReaders
160 ( Tagged @1 a9,
161 Tagged @2 a8,
162 Tagged @3 a7,
163 Tagged @4 a6 ) .
164 flip runReadersT
165 ( Tagged @5 a5,
166 Tagged @6 a4,
167 Tagged @7 a3,
168 Tagged @8 a2,
169 Tagged @9 a1 ) $
170 readerCombinerEther_sep_9
172run_stateCombinerEther_flatten_9 ::
173 (Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
174 ((), _)
175run_stateCombinerEther_flatten_9
176 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
177 =
178 runStates
179 stateCombinerEther_sep_9
180 ( Tagged @1 a9,
181 Tagged @2 a8,
182 Tagged @3 a7,
183 Tagged @4 a6,
184 Tagged @5 a5,
185 Tagged @6 a4,
186 Tagged @7 a3,
187 Tagged @8 a2,
188 Tagged @9 a1 )
190tuple_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int)
191tuple_9 = (1, -2, 3, -4, 5, -6, 7, -8, 9)
193main :: IO ()
194main = do
195 defaultMain
196 [ bench "readerCombinerMTL_flat_9" $ nf run_readerCombinerMTL_flat_9 tuple_9
197 , bench "readerCombinerEther_nested_9" $ nf run_readerCombinerEther_nested_9 tuple_9
198 , bench "readerCombinerEther_flatten_9" $ nf run_readerCombinerEther_flatten_9 tuple_9
199 , bench "readerCombinerEther_flattenhalf_9" $
200 nf run_readerCombinerEther_flattenhalf_9 tuple_9
201 , bench "stateCombinerMTL_flat_9" $ nf run_stateCombinerMTL_flat_9 tuple_9
202 , bench "stateCombinerEther_flatten_9" $ nf run_stateCombinerEther_flatten_9 tuple_9
203 ]