@@ -4,46 +4,63 @@ module Main where
5import Gauge (bench, bgroup, nf, nfAppIO)
5import Gauge (bench, bgroup, nf, nfAppIO)
6import Gauge.Main (defaultMain)
6import Gauge.Main (defaultMain)
8import qualified Fused.Countdown as Fused
9import qualified Fused.Countdown as Fused
9import qualified Simple.Countdown as Simple
10import qualified Simple.Countdown as Simple
10import qualified Shallow.Countdown as Shallow
11import qualified Shallow.Countdown as Shallow
11import qualified MTL.Countdown as MTL
12import qualified MTL.Countdown as MTL
12import qualified Poly.Countdown as Poly
13import qualified Poly.Countdown as Poly
14+import qualified ExtEff.Countdown as ExtEff
14import qualified Fused.HTTPM as Fused
16import qualified Fused.HTTPM as Fused
15import qualified Simple.HTTPM as Simple
17import qualified Simple.HTTPM as Simple
16import qualified MTL.HTTPM as MTL
18import qualified MTL.HTTPM as MTL
17import qualified Shallow.HTTPM as Shallow
19import qualified Shallow.HTTPM as Shallow
18import qualified Poly.HTTPM as Poly
20import qualified Poly.HTTPM as Poly
21+import qualified ExtEff.HTTPM as ExtEff
23+#define MEMSUITE(nam,v) sequence_ [ Weigh.func "fused-effects" Fused.nam v \
24+ , Weigh.func "mtl" MTL.nam v \
25+ , Weigh.func "polysemy" Poly.nam v \
26+ , Weigh.func "freer-simple" Simple.nam v \
27+ , Weigh.func "extensible-effects" ExtEff.nam v \
28+ , Weigh.func "shallow" Shallow.nam v ]
20#define SUITE(nam,v) [ bench "fused-effects" (nf Fused.nam v) \
30#define SUITE(nam,v) [ bench "fused-effects" (nf Fused.nam v) \
21 , bench "mtl" (nf MTL.nam v) \
31 , bench "mtl" (nf MTL.nam v) \
22 , bench "polysemy" (nf Poly.nam v) \
32 , bench "polysemy" (nf Poly.nam v) \
23 , bench "freer-simple" (nf Simple.nam v) \
33 , bench "freer-simple" (nf Simple.nam v) \
34+ , bench "extensible-effects" (nf ExtEff.nam v) \
24 , bench "shallow" (nf Shallow.nam v) ]
35 , bench "shallow" (nf Shallow.nam v) ]
26runs :: Int
40runs :: Int
27runs = 10000
41runs = 10000
29main :: IO ()
43main :: IO ()
45+ putStrLn "*** Time benchmarks ***"
30−main = defaultMain
46+ defaultMain
32− bgroup "Countdown"
48+ bgroup "Countdown"
33− [ bgroup "Put" SUITE(countDownPut, runs)
49+ [ bgroup "Put" SUITE(countDownPut, runs)
34− , bgroup "Put+Exc" SUITE(countDownExc, runs)
50+ , bgroup "Put+Exc" SUITE(countDownExc, runs)
36− , bgroup "HTTP"
52+ , bgroup "HTTP"
37− [ bench "fused-effects" (nfAppIO Fused.doHTTP runs)
53+ [ bench "fused-effects" (nfAppIO Fused.doHTTP runs)
38− , bench "polysemy" (nfAppIO Poly.doHTTP runs)
54+ , bench "polysemy" (nfAppIO Poly.doHTTP runs)
55+ , bench "extensible-effects" (nfAppIO ExtEff.doHTTP runs)
39− , bench "Deep embedding" (nfAppIO MTL.doHTTP runs)
56+ , bench "Deep embedding" (nfAppIO MTL.doHTTP runs)
40− , bench "Shallow embedding" (nfAppIO Shallow.doHTTP runs)
57+ , bench "Shallow embedding" (nfAppIO Shallow.doHTTP runs)
41− , bench "freer-simple" (nfAppIO Simple.doHTTP runs)
58+ , bench "freer-simple" (nfAppIO Simple.doHTTP runs)
45−bareDown :: Int -> (Int, Int)
62+ putStrLn "*** Space benchmarks (these will take some time to run) ***"
46−bareDown st = if st <= 0 then (st, st) else bareDown (st - 1)
63+ Weigh.mainWith $ do
64+ Weigh.wgroup "Countdown" $ MEMSUITE(countDownPut, wruns)
65+ Weigh.wgroup "Countdown + exc" $ MEMSUITE(countDownExc, wruns)
48−bareDownExc :: Int -> Either String (Int, Int)
49−bareDownExc st = if st <= 0 then Left "what" else bareDownExc (st - 1)