@@ -3,6 +3,7 @@
3{-# LANGUAGE FunctionalDependencies #-}
3{-# LANGUAGE FunctionalDependencies #-}
4{-# LANGUAGE FlexibleContexts #-}
4{-# LANGUAGE FlexibleContexts #-}
5{-# LANGUAGE DataKinds #-}
5{-# LANGUAGE DataKinds #-}
6+{-# LANGUAGE TypeOperators #-}
7module Main (main) where
8module Main (main) where
@@ -15,61 +16,66 @@ import qualified Control.Monad.Ether.Reader.Flatten as E.F
15import qualified Control.Monad.Ether.State.Flatten as E.F
16import qualified Control.Monad.Ether.State.Flatten as E.F
16import Control.Ether.Flatten
17import Control.Ether.Flatten
17import qualified Control.Lens as L
18import qualified Control.Lens as L
19+import Control.DeepSeq
19−readerSummatorMTL_flat_9
21+id' :: a -> a
25+readerCombinerMTL_flat_9
20 :: M.MonadReader (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
26 :: M.MonadReader (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
21− => m String
27+ => m ()
22−readerSummatorMTL_flat_9 = do
28+readerCombinerMTL_flat_9 = do
23− concat <$> sequenceA
29+ rnf <$> sequenceA
24− [ show <$> L.view L._1
30+ [ L.view L._1
25− , show <$> L.view L._2
31+ , L.view L._2
26− , show <$> L.view L._3
32+ , L.view L._3
27− , show <$> L.view L._4
33+ , L.view L._4
28− , show <$> L.view L._5
34+ , L.view L._5
29− , show <$> L.view L._6
35+ , L.view L._6
30− , show <$> L.view L._7
36+ , L.view L._7
31− , show <$> L.view L._8
37+ , L.view L._8
32− , show <$> L.view L._9 ]
38+ , L.view L._9 ]
33−{-# NOINLINE readerSummatorMTL_flat_9 #-}
39+{-# NOINLINE readerCombinerMTL_flat_9 #-}
35−stateSummatorMTL_flat_9
41+stateCombinerMTL_flat_9
36 :: M.MonadState (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
42 :: M.MonadState (Int, Int, Int, Int, Int, Int, Int, Int, Int) m
37− => m String
43+ => m ()
38−stateSummatorMTL_flat_9 = do
44+stateCombinerMTL_flat_9 = do
39− M.modify (L.over L._1 (+1))
45+ M.modify (L.over L._1 id')
40− M.modify (L.over L._2 (+2))
46+ M.modify (L.over L._2 id')
41− M.modify (L.over L._3 (+3))
47+ M.modify (L.over L._3 id')
42− M.modify (L.over L._4 (+4))
48+ M.modify (L.over L._4 id')
43− M.modify (L.over L._5 (+5))
49+ M.modify (L.over L._5 id')
44− M.modify (L.over L._6 (+6))
50+ M.modify (L.over L._6 id')
45− M.modify (L.over L._7 (+7))
51+ M.modify (L.over L._7 id')
46− M.modify (L.over L._8 (+8))
52+ M.modify (L.over L._8 id')
47− M.modify (L.over L._9 (+9))
53+ M.modify (L.over L._9 id')
48− concat <$> sequenceA
54+ rnf <$> sequenceA
49− [ show <$> L.use L._1
55+ [ L.use L._1
50− , show <$> L.use L._2
56+ , L.use L._2
51− , show <$> L.use L._3
57+ , L.use L._3
52− , show <$> L.use L._4
58+ , L.use L._4
53− , show <$> L.use L._5
59+ , L.use L._5
54− , show <$> L.use L._6
60+ , L.use L._6
55− , show <$> L.use L._7
61+ , L.use L._7
56− , show <$> L.use L._8
62+ , L.use L._8
57− , show <$> L.use L._9 ]
63+ , L.use L._9 ]
58−{-# NOINLINE stateSummatorMTL_flat_9 #-}
64+{-# NOINLINE stateCombinerMTL_flat_9 #-}
60−run_readerSummatorMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
66+run_readerCombinerMTL_flat_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
61−run_readerSummatorMTL_flat_9
67+run_readerCombinerMTL_flat_9
62 (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
68 (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)
65−run_stateSummatorMTL_flat_9 ::
71+run_stateCombinerMTL_flat_9 ::
66 (Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
72 (Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
67− (String, (Int, Int, Int, Int, Int, Int, Int, Int, Int))
73+ ((), (Int, Int, Int, Int, Int, Int, Int, Int, Int))
68−run_stateSummatorMTL_flat_9
74+run_stateCombinerMTL_flat_9
69 (a1, a2, a3, a4, a5, a6, a7, a8, a9) =
75 (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)
72−readerSummatorEther_sep_9
78+readerCombinerEther_sep_9
73 :: ( E.MonadReader 1 Int m
79 :: ( E.MonadReader 1 Int m
74 , E.MonadReader 2 Int m
80 , E.MonadReader 2 Int m
75 , E.MonadReader 3 Int m
81 , E.MonadReader 3 Int m
@@ -79,20 +85,20 @@ readerSummatorEther_sep_9
79 , E.MonadReader 7 Int m
85 , E.MonadReader 7 Int m
80 , E.MonadReader 8 Int m
86 , E.MonadReader 8 Int m
81 , E.MonadReader 9 Int m )
87 , E.MonadReader 9 Int m )
82− => m String
88+ => m ()
83−readerSummatorEther_sep_9 = concat <$> sequenceA
89+readerCombinerEther_sep_9 = rnf <$> sequenceA
84− [ show <$> E.ask @1
90+ [ E.ask @1
85− , show <$> E.ask @2
91+ , E.ask @2
86− , show <$> E.ask @3
92+ , E.ask @3
87− , show <$> E.ask @4
93+ , E.ask @4
88− , show <$> E.ask @5
94+ , E.ask @5
89− , show <$> E.ask @6
95+ , E.ask @6
90− , show <$> E.ask @7
96+ , E.ask @7
91− , show <$> E.ask @8
97+ , E.ask @8
92− , show <$> E.ask @9 ]
98+ , E.ask @9 ]
93−{-# NOINLINE readerSummatorEther_sep_9 #-}
99+{-# NOINLINE readerCombinerEther_sep_9 #-}
95−stateSummatorEther_sep_9
101+stateCombinerEther_sep_9
96 :: ( E.MonadState 1 Int m
102 :: ( E.MonadState 1 Int m
97 , E.MonadState 2 Int m
103 , E.MonadState 2 Int m
98 , E.MonadState 3 Int m
104 , E.MonadState 3 Int m
@@ -102,30 +108,30 @@ stateSummatorEther_sep_9
102 , E.MonadState 7 Int m
108 , E.MonadState 7 Int m
103 , E.MonadState 8 Int m
109 , E.MonadState 8 Int m
104 , E.MonadState 9 Int m )
110 , E.MonadState 9 Int m )
105− => m String
111+ => m ()
106−stateSummatorEther_sep_9 = do
112+stateCombinerEther_sep_9 = do
107− E.modify @1 (+1)
113+ E.modify @1 id'
108− E.modify @2 (+2)
114+ E.modify @2 id'
109− E.modify @3 (+3)
115+ E.modify @3 id'
110− E.modify @4 (+4)
116+ E.modify @4 id'
111− E.modify @5 (+5)
117+ E.modify @5 id'
112− E.modify @6 (+6)
118+ E.modify @6 id'
113− E.modify @7 (+7)
119+ E.modify @7 id'
114− E.modify @8 (+8)
120+ E.modify @8 id'
115− E.modify @9 (+9)
121+ E.modify @9 id'
116− concat <$> sequenceA
122+ rnf <$> sequenceA
117− [ show <$> E.get @1
123+ [ E.get @1
118− , show <$> E.get @2
124+ , E.get @2
119− , show <$> E.get @3
125+ , E.get @3
120− , show <$> E.get @4
126+ , E.get @4
121− , show <$> E.get @5
127+ , E.get @5
122− , show <$> E.get @6
128+ , E.get @6
123− , show <$> E.get @7
129+ , E.get @7
124− , show <$> E.get @8
130+ , E.get @8
125− , show <$> E.get @9 ]
131+ , E.get @9 ]
127−run_readerSummatorEther_nested_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
133+run_readerCombinerEther_nested_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
128−run_readerSummatorEther_nested_9
134+run_readerCombinerEther_nested_9
129 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
135 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
130 = flip (E.runReader @9) a1
136 = flip (E.runReader @9) a1
131 . flip (E.runReaderT @8) a2
137 . flip (E.runReaderT @8) a2
@@ -136,36 +142,33 @@ run_readerSummatorEther_nested_9
136 . flip (E.runReaderT @3) a7
142 . flip (E.runReaderT @3) a7
137 . flip (E.runReaderT @2) a8
143 . flip (E.runReaderT @2) a8
138 . flip (E.runReaderT @1) a9
144 . flip (E.runReaderT @1) a9
139− $ readerSummatorEther_sep_9
145+ $ readerCombinerEther_sep_9
141−run_readerSummatorEther_flatten_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
147+run_readerCombinerEther_flatten_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
142−run_readerSummatorEther_flatten_9
148+run_readerCombinerEther_flatten_9
143 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
149 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
145− E.F.runReader
151+ E.F.runReader @'[1,2,3,4,5,6,7,8,9]
146− readerSummatorEther_sep_9
152+ readerCombinerEther_sep_9
147− ( load @1 a9 <+> load @2 a8 <+> load @3 a7 <+> load @4 a6 <+>
153+ (P9 a9 a8 a7 a6 a5 a4 a3 a2 a1)
148− load @5 a5 <+> load @6 a4 <+> load @7 a3 <+> load @8 a2 <+>
154+
151−run_readerSummatorEther_flattenhalf_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> String
156+run_readerCombinerEther_flattenhalf_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int) -> ()
152−run_readerSummatorEther_flattenhalf_9
157+run_readerCombinerEther_flattenhalf_9
153 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
158 (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)
159+ = flip (E.F.runReader @'[1,2,3,4]) (P4 a9 a8 a7 a6)
155− . flip E.F.runReaderT (load @5 a5 <+> load @6 a4 <+> load @7 a3 <+> load @8 a2 <+> load @9 a1)
160+ . flip (E.F.runReaderT @'[5,6,7,8,9]) (P5 a5 a4 a3 a2 a1)
156− $ readerSummatorEther_sep_9
161+ $ readerCombinerEther_sep_9
158−run_stateSummatorEther_flatten_9 ::
163+run_stateCombinerEther_flatten_9 ::
159 (Int, Int, Int, Int, Int, Int, Int, Int, Int) ->
164 (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])
165+ ((), Product '[1,2,3,4,5,6,7,8,9] '[Int,Int,Int,Int,Int,Int,Int,Int,Int])
161−run_stateSummatorEther_flatten_9
166+run_stateCombinerEther_flatten_9
162 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
167 (a1, a2, a3, a4, a5, a6, a7, a8, a9)
164 E.F.runState
169 E.F.runState
165− stateSummatorEther_sep_9
170+ stateCombinerEther_sep_9
166− ( load @1 a9 <+> load @2 a8 <+> load @3 a7 <+> load @4 a6 <+>
171+ (P9 a9 a8 a7 a6 a5 a4 a3 a2 a1)
167− load @5 a5 <+> load @6 a4 <+> load @7 a3 <+> load @8 a2 <+>
170tuple_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int)
173tuple_9 :: (Int, Int, Int, Int, Int, Int, Int, Int, Int)
171tuple_9 = (1, -2, 3, -4, 5, -6, 7, -8, 9)
174tuple_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)
173main :: IO ()
176main :: IO ()
175 defaultMain
178 defaultMain
176− [ bench "readerSummatorMTL_flat_9" $ nf run_readerSummatorMTL_flat_9 tuple_9
179+ [ bench "readerCombinerMTL_flat_9" $ nf run_readerCombinerMTL_flat_9 tuple_9
177− , bench "readerSummatorEther_nested_9" $ nf run_readerSummatorEther_nested_9 tuple_9
180+ , bench "readerCombinerEther_nested_9" $ nf run_readerCombinerEther_nested_9 tuple_9
178− , bench "readerSummatorEther_flatten_9" $ nf run_readerSummatorEther_flatten_9 tuple_9
181+ , bench "readerCombinerEther_flatten_9" $ nf run_readerCombinerEther_flatten_9 tuple_9
179− , bench "readerSummatorEther_flattenhalf_9" $
182+ , bench "readerCombinerEther_flattenhalf_9" $
180− nf run_readerSummatorEther_flattenhalf_9 tuple_9
183+ nf run_readerCombinerEther_flattenhalf_9 tuple_9
181− , bench "stateSummatorMTL_flat_9" $ nf run_stateSummatorMTL_flat_9 tuple_9
184+ , bench "stateCombinerMTL_flat_9" $ nf run_stateCombinerMTL_flat_9 tuple_9
182− , bench "stateSummatorEther_flatten_9" $ nf run_stateSummatorEther_flatten_9 tuple_9
185+ , bench "stateCombinerEther_flatten_9" $ nf run_stateCombinerEther_flatten_9 tuple_9