create list = C.fromList list benchs = [ ("insert", bench_insert) , ("member0", bench_member0) , ("member50", bench_member50) , ("member100", bench_member100) , ("delete", bench_delete) , ("union", bench_union) , ("difference", bench_difference) , ("intersection", bench_intersection) , ("fold-list", bench_foldlist) #ifdef FOLD_SUM , ("fold-sum", bench_foldsum) #endif ] bench_insert (list, _, _, _) = go C.empty list where go !c [] = () go !c (x:xs) = go (C.insert x c) xs bench_member100 (list, c, _, _) = go c list where go c [] = () go c (x:xs) = C.member x c `seq` go c xs bench_member50 (list, _, _, c_odd) = go c_odd list where go c [] = () go c (x:xs) = C.member x c `seq` go c xs bench_member0 (list, _, _, c_odd) = go c_odd list where go c [] = () go c [_] = () go c (_:x:xs) = C.member x c `seq` go c xs bench_delete (list, c, _, _) = go c list where go !c [] = () go !c (x:xs) = go (C.delete x c) xs bench_union (_, _, c_even, c_odd) = C.union c_even c_odd `seq` () bench_difference (_, c, c_even, _) = C.difference c c_even `seq` () bench_intersection (_, c, c_even, _) = C.intersection c c_even `seq` () bench_foldlist (_, c, _, _) = force $ C.foldr (:) [] c where force list = length list `seq` () #ifdef FOLD_SUM bench_foldsum (_, c, _, _) = C.foldl' (+) 0 c `seq` () #endif