packages feed

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