rawr-0.0.0.0: benchmarks/perf/Main.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
module Main (main) where
import Control.DeepSeq
import Criterion.Main
import Data.Rawr
main :: IO ()
main =
defaultMain
[ bgroup "R/reverse5"
[ bench "rawr" $ nf R ( #e := (), #d := (), #c := (), #b := (), #a := () )
, bench "handwritten" $ nf (\(a, b, c, d, e) -> (e, d, c, b, a)) ( #e := (), #d := (), #c := (), #b := (), #a := () )
, bench "identity" $ nf id ( #e := (), #d := (), #c := (), #b := (), #a := () )
]
, bgroup "R/identity5"
[ bench "rawr" $ nf R ( #a := (), #b := (), #c := (), #d := (), #e := () )
, bench "handwritten" $ nf id ( #a := (), #b := (), #c := (), #d := (), #e := () )
]
, bgroup "select"
[ bench "rawr" $ nf #e (R ( #a := (), #b := (), #c := (), #d := (), #e := () ))
, bench "handwritten" $ nf (\(a, b, c, d, e) -> e) ( #a := (), #b := (), #c := (), #d := (), #e := () )
]
, bgroup "merge"
[ bench "rawr" $ nf (uncurry (:*:)) (R ( #a := (), #e := () ), R ( #b := (), #c := (), #d := () ))
, bench "handwritten" $ nf (uncurry $ \(a, e) (b, c, d) -> (a, b, c, d, e)) (( #a := (), #e := () ), ( #b := (), #c := (), #d := () ))
]
, bgroup "partition"
[ bench "rawr" $ nf (\(R ( _ :: "c" := () , _ :: "e" := () ) :*: r) -> r) (R ( #a := (), #b := (), #c := (), #d := (), #e := () ))
, bench "handwritten" $ nf (\(a, b, _, d, _) -> (a, b, d)) ( #a := (), #b := (), #c := (), #d := (), #e := () )
]
]