git.iko.soy/effects-benchmarks
on master help sign in
shallow + http
commite9ffc20e5fd48de6df2f017791221896ac067dc1 authorPatrick Thomson <patrickt@github.com> dateTue 30 Apr 2019, 15:58 (7 years ago) parente6e981a
3 files changed+44−10
README.md+4 effects-benchmarks.cabal+18−3 src/Main.hs+22−7
README.md+4
@@ -1 +1,5 @@
11# 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
2121 hs-source-dirs: src
2222 signatures: Bench.Signature.Stateful
2323 , Bench.Signature.StatefulExcept
24+ , Bench.Signature.HTTP
2425 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
2535
2636library instances-for-mtl
2737 import: shared
2838 hs-source-dirs: instances
2939 exposed-modules: MTLStateful
3040 , MTL.StatefulExcept
41+ , MTL.DeepHTTP
3142 build-depends: mtl ^>= 2.2.2
3243
3344library instances-for-fused-effects
@@ -35,6 +46,7 @@ library instances-for-fused-effects
3546 hs-source-dirs: instances
3647 exposed-modules: Fused.Stateful
3748 , Fused.StatefulExcept
49+ , Fused.HTTP
3850 build-depends: fused-effects >= 0.3.1.0
3951
4052library instances-for-freer-simple
@@ -42,6 +54,7 @@ library instances-for-freer-simple
4254 hs-source-dirs: instances
4355 exposed-modules: FSStateful
4456 , Freer.StatefulExcept
57+ , Freer.HTTP
4558 build-depends: freer-simple ^>= 1.2.1
4659
4760benchmark effects-benchmarks
@@ -52,10 +65,12 @@ benchmark effects-benchmarks
5265 , instances-for-mtl
5366 , instances-for-fused-effects
5467 , instances-for-freer-simple
68+ , instances-for-shallow
5569 , dump-core
5670 , gauge
5771 , polysemy
5872 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)
60− , benchmark-signatures (Bench.Countdown as Fused.Countdown) requires (Bench.Signature.Stateful as Fused.Stateful, Bench.Signature.StatefulExcept as Fused.StatefulExcept)
61− , benchmark-signatures (Bench.Countdown as Simple.Countdown) requires (Bench.Signature.Stateful as FSStateful, Bench.Signature.StatefulExcept as Freer.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)
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)
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 @@
22
33module Main where
44
5−import Gauge (bench, bgroup, nf)
5+import Gauge (bench, bgroup, nf, nfAppIO)
66import Gauge.Main (defaultMain)
77
88import qualified Fused.Countdown as Fused
99import qualified Simple.Countdown as Simple
10+import qualified Shallow.Countdown as Shallow
1011import qualified MTL.Countdown as MTL
1112
12−#define SUITE(nam,bare) [ bench "fused-effects" (nf MTL.nam 10000) \
13− , bench "mtl" (nf Fused.nam 10000) \
14− , bench "freer-simple" (nf Simple.nam 10000) \
15− , bench "manual" (nf bare 10000) ]
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+
18+#define SUITE(nam,v) [ bench "fused-effects" (nf Fused.nam v) \
19+ , bench "mtl" (nf MTL.nam v) \
20+ , bench "freer-simple" (nf Simple.nam v) \
21+ , bench "shallow" (nf Shallow.nam v) ]
22+
23+runs :: Int
24+runs = 10000
1625
1726main :: IO ()
1827main = defaultMain
1928 [
2029 bgroup "Countdown"
21− [ bgroup "Put" SUITE(countDownPut, bareDown)
22− , bgroup "Put+Exc" SUITE(countDownExc, bareDownExc)
30+ [ bgroup "Put" SUITE(countDownPut, runs)
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)
2338 ]
2439 ]
2540