module Main (main) where
import Data.SortedList (SortedList)
import qualified Data.SortedList as SL
import Criterion.Main (defaultMain, bench, nf)
list :: SortedList Int
list = SL.take 100 $ SL.iterate (+1) 1
-- | Monotonically increasing function.
incf :: Int -> Int
incf x = 2 * x
-- | Monotonically decreasing function.
decf :: Int -> Int
decf x = (-2) * x
main :: IO ()
main = defaultMain
[ bench "increasing/map" $ nf (SL.map incf) list
, bench "increasing/mapDec" $ nf (SL.mapDec incf) list
, bench "decreasing/map" $ nf (SL.map decf) list
, bench "decreasing/mapDec" $ nf (SL.mapDec decf) list
, bench "insert" $ nf (SL.insert 60) list
, bench "liftA2" $ nf (\xs -> SL.liftA2 (+) xs xs) list
]