bookkeeper-0.2.2.0: bench/Main.hs
module Main where
import Bookkeeper
import Criterion.Main
type PersonB = Book '[ "name" :=> String, "age" :=> Int ]
data PersonR = PersonR { name :: String, age :: {-# NOUNPACK #-} Int } deriving (Eq, Show)
pb :: PersonB
pb = emptyBook
& #name =: ""
& #age =: 0
pr :: PersonR
pr = PersonR
{ name = ""
, age = 0
}
modB :: Int -> PersonB
modB 0 = pb
modB n = modB (n - 1) & #age %: (+ n)
modR :: Int -> PersonR
modR 0 = pr
modR n = let p = modR (n - 1) in p { age = age p + n }
main :: IO ()
main = defaultMain
[ bgroup "modB" [ bench "10" $ nf (\x -> get #age $ modB x) 10
, bench "100" $ nf (\x -> get #age $ modB x) 100
]
, bgroup "modR" [ bench "10" $ nf (\x -> age $ modR x) 10
, bench "100" $ nf (\x -> age $ modR x) 100
]
]