{-# 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