module Main where import Criterion.Main (bench, bgroup, defaultMain, nf) import 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 ] ]