git.iko.soy/effects-benchmarks
on master help sign in
shallow + http
e9ffc20Patrick Thomson
README.md+4
@@ -1 +1,5 @@
1# effects-benchmarks
1# effects-benchmarks
2+
3+## Why Polysemy isn't on here
4+
5+There's a mysterious bug (possibly due to Backpack) where incorrect Core is generated when importing polysemy.
effects-benchmarks.cabal+18−3
@@ -21,13 +21,24 @@ library benchmark-signatures
21 hs-source-dirs: src
21 hs-source-dirs: src
22 signatures: Bench.Signature.Stateful
22 signatures: Bench.Signature.Stateful
23 , Bench.Signature.StatefulExcept
23 , Bench.Signature.StatefulExcept
24+ , Bench.Signature.HTTP
24 exposed-modules: Bench.Countdown
25 exposed-modules: Bench.Countdown
26+ , Bench.HTTP
27+
28+library instances-for-shallow
29+ import: shared
30+ hs-source-dirs: instances
31+ default-extensions: StrictData
32+ exposed-modules: Shallow.HTTP
33+ , Shallow.Stateful
34+ , Shallow.StatefulExcept
25
35
26library instances-for-mtl
36library instances-for-mtl
27 import: shared
37 import: shared
28 hs-source-dirs: instances
38 hs-source-dirs: instances
29 exposed-modules: MTLStateful
39 exposed-modules: MTLStateful
30 , MTL.StatefulExcept
40 , MTL.StatefulExcept
41+ , MTL.DeepHTTP
31 build-depends: mtl ^>= 2.2.2
42 build-depends: mtl ^>= 2.2.2
32
43
33library instances-for-fused-effects
44library instances-for-fused-effects
@@ -35,6 +46,7 @@ library instances-for-fused-effects
35 hs-source-dirs: instances
46 hs-source-dirs: instances
36 exposed-modules: Fused.Stateful
47 exposed-modules: Fused.Stateful
37 , Fused.StatefulExcept
48 , Fused.StatefulExcept
49+ , Fused.HTTP
38 build-depends: fused-effects >= 0.3.1.0
50 build-depends: fused-effects >= 0.3.1.0
39
51
40library instances-for-freer-simple
52library instances-for-freer-simple
@@ -42,6 +54,7 @@ library instances-for-freer-simple
42 hs-source-dirs: instances
54 hs-source-dirs: instances
43 exposed-modules: FSStateful
55 exposed-modules: FSStateful
44 , Freer.StatefulExcept
56 , Freer.StatefulExcept
57+ , Freer.HTTP
45 build-depends: freer-simple ^>= 1.2.1
58 build-depends: freer-simple ^>= 1.2.1
46
59
47benchmark effects-benchmarks
60benchmark effects-benchmarks
@@ -52,10 +65,12 @@ benchmark effects-benchmarks
52 , instances-for-mtl
65 , instances-for-mtl
53 , instances-for-fused-effects
66 , instances-for-fused-effects
54 , instances-for-freer-simple
67 , instances-for-freer-simple
68+ , instances-for-shallow
55 , dump-core
69 , dump-core
56 , gauge
70 , gauge
57 , polysemy
71 , polysemy
58 main-is: Main.hs
72 main-is: Main.hs
59− mixins: benchmark-signatures (Bench.Countdown as MTL.Countdown) requires (Bench.Signature.Stateful as MTLStateful, Bench.Signature.StatefulExcept as MTL.StatefulExcept)
73+ mixins: benchmark-signatures (Bench.Countdown as MTL.Countdown, Bench.HTTP as MTL.HTTPM) requires (Bench.Signature.Stateful as MTLStateful, Bench.Signature.StatefulExcept as MTL.StatefulExcept, Bench.Signature.HTTP as MTL.DeepHTTP)
60− , benchmark-signatures (Bench.Countdown as Fused.Countdown) requires (Bench.Signature.Stateful as Fused.Stateful, Bench.Signature.StatefulExcept as Fused.StatefulExcept)
74+ , benchmark-signatures (Bench.Countdown as Fused.Countdown, Bench.HTTP as Fused.HTTPM) requires (Bench.Signature.Stateful as Fused.Stateful, Bench.Signature.StatefulExcept as Fused.StatefulExcept, Bench.Signature.HTTP as Fused.HTTP)
61− , benchmark-signatures (Bench.Countdown as Simple.Countdown) requires (Bench.Signature.Stateful as FSStateful, Bench.Signature.StatefulExcept as Freer.StatefulExcept)
75+ , benchmark-signatures (Bench.Countdown as Simple.Countdown, Bench.HTTP as Simple.HTTPM) requires (Bench.Signature.Stateful as FSStateful, Bench.Signature.StatefulExcept as Freer.StatefulExcept, Bench.Signature.HTTP as Freer.HTTP)
76+ , benchmark-signatures (Bench.Countdown as Shallow.Countdown, Bench.HTTP as Shallow.HTTPM) requires (Bench.Signature.Stateful as Shallow.Stateful, Bench.Signature.StatefulExcept as Shallow.StatefulExcept, Bench.Signature.HTTP as Shallow.HTTP)
src/Main.hs+22−7
@@ -2,24 +2,39 @@
2
2
3module Main where
3module Main where
4
4
5−import Gauge (bench, bgroup, nf)
5+import Gauge (bench, bgroup, nf, nfAppIO)
6import Gauge.Main (defaultMain)
6import Gauge.Main (defaultMain)
7
7
8import qualified Fused.Countdown as Fused
8import qualified Fused.Countdown as Fused
9import qualified Simple.Countdown as Simple
9import qualified Simple.Countdown as Simple
10+import qualified Shallow.Countdown as Shallow
10import qualified MTL.Countdown as MTL
11import qualified MTL.Countdown as MTL
11
12
13+import qualified Fused.HTTPM as Fused
14+import qualified Simple.HTTPM as Simple
15+import qualified MTL.HTTPM as MTL
16+import qualified Shallow.HTTPM as Shallow
17+
12−#define SUITE(nam,bare) [ bench "fused-effects" (nf MTL.nam 10000) \
18+#define SUITE(nam,v) [ bench "fused-effects" (nf Fused.nam v) \
13− , bench "mtl" (nf Fused.nam 10000) \
19+ , bench "mtl" (nf MTL.nam v) \
14− , bench "freer-simple" (nf Simple.nam 10000) \
20+ , bench "freer-simple" (nf Simple.nam v) \
15− , bench "manual" (nf bare 10000) ]
21+ , bench "shallow" (nf Shallow.nam v) ]
22+
23+runs :: Int
24+runs = 10000
16
25
17main :: IO ()
26main :: IO ()
18main = defaultMain
27main = defaultMain
19 [
28 [
20 bgroup "Countdown"
29 bgroup "Countdown"
21− [ bgroup "Put" SUITE(countDownPut, bareDown)
30+ [ bgroup "Put" SUITE(countDownPut, runs)
22− , bgroup "Put+Exc" SUITE(countDownExc, bareDownExc)
31+ , bgroup "Put+Exc" SUITE(countDownExc, runs)
32+ ]
33+ , bgroup "HTTP"
34+ [ bench "fused-effects" (nfAppIO Fused.doHTTP runs)
35+ , bench "Deep embedding" (nfAppIO MTL.doHTTP runs)
36+ , bench "Shallow embedding" (nfAppIO Shallow.doHTTP runs)
37+ , bench "freer-simple" (nfAppIO Simple.doHTTP runs)
23 ]
38 ]
24 ]
39 ]
25
40