@@ -3,6 +3,7 @@
33{-# LANGUAGE FunctionalDependencies #-}
44{-# LANGUAGE FlexibleContexts #-}
55{-# LANGUAGE DataKinds #-}
6+{-# LANGUAGE TypeOperators #-}
67
78module Main (main) where
89
@@ -15,61 +16,66 @@ import qualified Control.Monad.Ether.Reader.Flatten as E.F
1516import qualified Control.Monad.Ether.State.Flatten as E.F
1617import Control.Ether.Flatten
1718import qualified Control.Lens as L
19+import Control.DeepSeq
1820
19−readerSummatorMTL_flat_9
21+id' :: a -> a
22+id' = id
23+{-# NOINLINE id' #-}
24+
25+readerCombinerMTL_flat_9
2026 :: M.MonadReader (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
21− => m String
22−readerSummatorMTL_flat_9 = do
23− concat <$> sequenceA
24− [ show <$> L.view L._1
25− , show <$> L.view L._2
26− , show <$> L.view L._3
27− , show <$> L.view L._4
28− , show <$> L.view L._5
29− , show <$> L.view L._6
30− , show <$> L.view L._7
31− , show <$> L.view L._8
32− , show <$> L.view L._9 ]
33−{-# NOINLINE readerSummatorMTL_flat_9 #-}
34−
35−stateSummatorMTL_flat_9
27+ => m ()
28+readerCombinerMTL_flat_9 = do
29+ rnf <$> sequenceA
30+ [ L.view L._1
31+ , L.view L._2
32+ , L.view L._3
33+ , L.view L._4
34+ , L.view L._5
35+ , L.view L._6
36+ , L.view L._7
37+ , L.view L._8
38+ , L.view L._9 ]
39+{-# NOINLINE readerCombinerMTL_flat_9 #-}
40+
41+stateCombinerMTL_flat_9
3642 :: M.MonadState (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
37− => m String
38−stateSummatorMTL_flat_9 = do
39− M.modify (L.over L._1 (+1))
40− M.modify (L.over L._2 (+2))
41− M.modify (L.over L._3 (+3))
42− M.modify (L.over L._4 (+4))
43− M.modify (L.over L._5 (+5))
44− M.modify (L.over L._6 (+6))
45− M.modify (L.over L._7 (+7))
46− M.modify (L.over L._8 (+8))
47− M.modify (L.over L._9 (+9))
48− concat <$> sequenceA
49− [ show <$> L.use L._1
50− , show <$> L.use L._2
51− , show <$> L.use L._3
52− , show <$> L.use L._4
53− , show <$> L.use L._5
54− , show <$> L.use L._6
55− , show <$> L.use L._7
56− , show <$> L.use L._8
57− , show <$> L.use L._9 ]
58−{-# NOINLINE stateSummatorMTL_flat_9 #-}
59−
60−run_readerSummatorMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
61−run_readerSummatorMTL_flat_9
43+ => m ()
44+stateCombinerMTL_flat_9 = do
45+ M.modify (L.over L._1 id')
46+ M.modify (L.over L._2 id')
47+ M.modify (L.over L._3 id')
48+ M.modify (L.over L._4 id')
49+ M.modify (L.over L._5 id')
50+ M.modify (L.over L._6 id')
51+ M.modify (L.over L._7 id')
52+ M.modify (L.over L._8 id')
53+ M.modify (L.over L._9 id')
54+ rnf <$> sequenceA
55+ [ L.use L._1
56+ , L.use L._2
57+ , L.use L._3
58+ , L.use L._4
59+ , L.use L._5
60+ , L.use L._6
61+ , L.use L._7
62+ , L.use L._8
63+ , L.use L._9 ]
64+{-# NOINLINE stateCombinerMTL_flat_9 #-}
65+
66+run_readerCombinerMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
67+run_readerCombinerMTL_flat_9
6268 (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
63− M.runReader readerSummatorMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
69+ M.runReader readerCombinerMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
6470
65−run_stateSummatorMTL_flat_9 ::
71+run_stateCombinerMTL_flat_9 ::
6672 (Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
67− (String, (Int, Int, Int, Int, Int, Int, Int, Int, Int))
68−run_stateSummatorMTL_flat_9
73+ ((), (Int, Int, Int, Int, Int, Int, Int, Int, Int))
74+run_stateCombinerMTL_flat_9
6975 (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
70− M.runState stateSummatorMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
76+ M.runState stateCombinerMTL_flat_9 (a9, a8, a7, a6, a5, a4, a3, a2, a1)
7177
72−readerSummatorEther_sep_9
78+readerCombinerEther_sep_9
7379 :: ( E.MonadReader 1 Int m
7480 , E.MonadReader 2 Int m
7581 , E.MonadReader 3 Int m
@@ -79,20 +85,20 @@ readerSummatorEther_sep_9
7985 , E.MonadReader 7 Int m
8086 , E.MonadReader 8 Int m
8187 , E.MonadReader 9 Int m )
82− => m String
83−readerSummatorEther_sep_9 = concat <$> sequenceA
84− [ show <$> E.ask @1
85− , show <$> E.ask @2
86− , show <$> E.ask @3
87− , show <$> E.ask @4
88− , show <$> E.ask @5
89− , show <$> E.ask @6
90− , show <$> E.ask @7
91− , show <$> E.ask @8
92− , show <$> E.ask @9 ]
93−{-# NOINLINE readerSummatorEther_sep_9 #-}
94−
95−stateSummatorEther_sep_9
88+ => m ()
89+readerCombinerEther_sep_9 = rnf <$> sequenceA
90+ [ E.ask @1
91+ , E.ask @2
92+ , E.ask @3
93+ , E.ask @4
94+ , E.ask @5
95+ , E.ask @6
96+ , E.ask @7
97+ , E.ask @8
98+ , E.ask @9 ]
99+{-# NOINLINE readerCombinerEther_sep_9 #-}
100+
101+stateCombinerEther_sep_9
96102 :: ( E.MonadState 1 Int m
97103 , E.MonadState 2 Int m
98104 , E.MonadState 3 Int m
@@ -102,30 +108,30 @@ stateSummatorEther_sep_9
102108 , E.MonadState 7 Int m
103109 , E.MonadState 8 Int m
104110 , E.MonadState 9 Int m )
105− => m String
106−stateSummatorEther_sep_9 = do
107− E.modify @1 (+1)
108− E.modify @2 (+2)
109− E.modify @3 (+3)
110− E.modify @4 (+4)
111− E.modify @5 (+5)
112− E.modify @6 (+6)
113− E.modify @7 (+7)
114− E.modify @8 (+8)
115− E.modify @9 (+9)
116− concat <$> sequenceA
117− [ show <$> E.get @1
118− , show <$> E.get @2
119− , show <$> E.get @3
120− , show <$> E.get @4
121− , show <$> E.get @5
122− , show <$> E.get @6
123− , show <$> E.get @7
124− , show <$> E.get @8
125− , show <$> E.get @9 ]
126−
127−run_readerSummatorEther_nested_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
128−run_readerSummatorEther_nested_9
111+ => m ()
112+stateCombinerEther_sep_9 = do
113+ E.modify @1 id'
114+ E.modify @2 id'
115+ E.modify @3 id'
116+ E.modify @4 id'
117+ E.modify @5 id'
118+ E.modify @6 id'
119+ E.modify @7 id'
120+ E.modify @8 id'
121+ E.modify @9 id'
122+ rnf <$> sequenceA
123+ [ E.get @1
124+ , E.get @2
125+ , E.get @3
126+ , E.get @4
127+ , E.get @5
128+ , E.get @6
129+ , E.get @7
130+ , E.get @8
131+ , E.get @9 ]
132+
133+run_readerCombinerEther_nested_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
134+run_readerCombinerEther_nested_9
129135 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
130136 = flip (E.runReader @9) a1
131137 . flip (E.runReaderT @8) a2
@@ -136,36 +142,33 @@ run_readerSummatorEther_nested_9
136142 . flip (E.runReaderT @3) a7
137143 . flip (E.runReaderT @2) a8
138144 . flip (E.runReaderT @1) a9
139− $ readerSummatorEther_sep_9
145+ $ readerCombinerEther_sep_9
140146
141−run_readerSummatorEther_flatten_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
142−run_readerSummatorEther_flatten_9
147+run_readerCombinerEther_flatten_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
148+run_readerCombinerEther_flatten_9
143149 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
144150 =
145− E.F.runReader
146− readerSummatorEther_sep_9
147− ( load @1 a9 <+> load @2 a8 <+> load @3 a7 <+> load @4 a6 <+>
148− load @5 a5 <+> load @6 a4 <+> load @7 a3 <+> load @8 a2 <+>
149− load @9 a1 )
150−
151−run_readerSummatorEther_flattenhalf_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
152−run_readerSummatorEther_flattenhalf_9
151+ E.F.runReader @'[1,2,3,4,5,6,7,8,9]
152+ readerCombinerEther_sep_9
153+ (P9 a9 a8 a7 a6 a5 a4 a3 a2 a1)
154+
155+
156+run_readerCombinerEther_flattenhalf_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
157+run_readerCombinerEther_flattenhalf_9
153158 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
154− = flip E.F.runReader (load @1 a9 <+> load @2 a8 <+> load @3 a7 <+> load @4 a6)
155− . flip E.F.runReaderT (load @5 a5 <+> load @6 a4 <+> load @7 a3 <+> load @8 a2 <+> load @9 a1)
156− $ readerSummatorEther_sep_9
159+ = flip (E.F.runReader @'[1,2,3,4]) (P4 a9 a8 a7 a6)
160+ . flip (E.F.runReaderT @'[5,6,7,8,9]) (P5 a5 a4 a3 a2 a1)
161+ $ readerCombinerEther_sep_9
157162
158−run_stateSummatorEther_flatten_9 ::
163+run_stateCombinerEther_flatten_9 ::
159164 (Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
160− (String, Product '[1,2,3,4,5,6,7,8,9] '[Int,Int,Int,Int,Int,Int,Int,Int,Int])
161−run_stateSummatorEther_flatten_9
165+ ((), Product '[1,2,3,4,5,6,7,8,9] '[Int,Int,Int,Int,Int,Int,Int,Int,Int])
166+run_stateCombinerEther_flatten_9
162167 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
163168 =
164169 E.F.runState
165− stateSummatorEther_sep_9
166− ( load @1 a9 <+> load @2 a8 <+> load @3 a7 <+> load @4 a6 <+>
167− load @5 a5 <+> load @6 a4 <+> load @7 a3 <+> load @8 a2 <+>
168− load @9 a1 )
170+ stateCombinerEther_sep_9
171+ (P9 a9 a8 a7 a6 a5 a4 a3 a2 a1)
169172
170173tuple_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int)
171174tuple_9 = (1, -2, 3, -4, 5, -6, 7, -8, 9)
@@ -173,11 +176,11 @@ tuple_9 = (1, -2, 3, -4, 5, -6, 7, -8, 9)
173176main :: IO ()
174177main = do
175178 defaultMain
176− [ bench "readerSummatorMTL_flat_9" $ nf run_readerSummatorMTL_flat_9 tuple_9
177− , bench "readerSummatorEther_nested_9" $ nf run_readerSummatorEther_nested_9 tuple_9
178− , bench "readerSummatorEther_flatten_9" $ nf run_readerSummatorEther_flatten_9 tuple_9
179− , bench "readerSummatorEther_flattenhalf_9" $
180− nf run_readerSummatorEther_flattenhalf_9 tuple_9
181− , bench "stateSummatorMTL_flat_9" $ nf run_stateSummatorMTL_flat_9 tuple_9
182− , bench "stateSummatorEther_flatten_9" $ nf run_stateSummatorEther_flatten_9 tuple_9
179+ [ bench "readerCombinerMTL_flat_9" $ nf run_readerCombinerMTL_flat_9 tuple_9
180+ , bench "readerCombinerEther_nested_9" $ nf run_readerCombinerEther_nested_9 tuple_9
181+ , bench "readerCombinerEther_flatten_9" $ nf run_readerCombinerEther_flatten_9 tuple_9
182+ , bench "readerCombinerEther_flattenhalf_9" $
183+ nf run_readerCombinerEther_flattenhalf_9 tuple_9
184+ , bench "stateCombinerMTL_flat_9" $ nf run_stateCombinerMTL_flat_9 tuple_9
185+ , bench "stateCombinerEther_flatten_9" $ nf run_stateCombinerEther_flatten_9 tuple_9
183186 ]