packages feed

varying-0.5.0.0: bench/Main.hs

import Control.Varying
import Criterion.Main
import Debug.Trace

main :: IO ()
main = do
    let v :: Var Int Int
        v = var (+1)
        run v a = fst <$> runVarT v a
    defaultMain $ [ bgroup "runVarT" [ bench "1" $ nf (run $ chain 1) 0
                                     , bench "2" $ nf (run $ chain 2) 0
                                     , bench "4" $ nf (run $ chain 4) 0
                                     , bench "8" $ nf (run $ chain 8) 0
                                     , bench "16" $ nf (run $ chain 16) 0
                                     , bench "32" $ nf (run $ chain 32) 0
                                     , bench "64" $ nf (run $ chain 64) 0
                                     , bench "128" $ nf (run $ chain 128) 0
                                     ]
                  ]
    return ()

chain :: Int -> Var Int Int
chain n = seq x x
  where x = foldl (~>) (var (+1)) $ take (n - 1) $ cycle [var (+1)]