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
]
]