packages feed

recursion-schemes-ext-0.1.0.4: bench/Bench.hs

module Main where

import           Criterion.Main                 (bench, bgroup, defaultMain, nf)
import           Data.Functor.Foldable.Examples (Bert (Add, Bert, Num),
                                                 Ernie (Ernie, Multiply),
                                                 collapseBertSyntaxTree,
                                                 collapseBertSyntaxTree')

bert :: Bert
bert = Add (Num 2) (Num 3)

ernie :: Ernie
ernie = Multiply (Ernie bert) (Ernie (Num 3))

bertNothing :: Bert
bertNothing = Bert ernie

ernieNested :: Ernie
ernieNested = Ernie bertNothing

bertComplex :: Bert
bertComplex = Add (Bert ernieNested) (Bert ernie)

main :: IO ()
main =
    defaultMain [ bgroup "collapseErnieSyntaxTree"
                      [ bench "dendromorphism" $ nf collapseBertSyntaxTree  bertComplex
                      , bench "catamorphism"   $ nf collapseBertSyntaxTree' bertComplex
                      ]
                ]