rrb-vector-0.1.0.0: bench/Traverse.hs
{-# LANGUAGE BangPatterns #-}
import Data.Foldable (foldl', toList)
import Data.Functor
import Gauge.Main
import qualified Data.RRBVector as RRB
main :: IO ()
main = defaultMain $ [10, 100, 1_000] <&> \n ->
let !v = RRB.fromList [1..n]
in bgroup (show n)
[ bench "f1 (where)" $ nf (\v -> f1 v v) v
, bench "f2" $ nf (\v -> f2 v v) v
]
where
f1 xs ys = foldl' (\acc x -> acc RRB.>< RRB.fromList (replicate n x)) RRB.empty xs
where
n = length ys
f2 xs ys = foldl' (\acc x -> acc RRB.>< RRB.fromList (replicate (length ys) x)) RRB.empty xs