module NoSlow.Main.Util ( kernel, kernels, kgroup, klist, KTree(..), (>++<) ) where import NoSlow.Util.Base import NoSlow.Util.Computation import Criterion.Main ( Benchmark, B(..), bench, bgroup ) kernel :: Computation b => String -> (Ty a -> b) -> Ty a -> Int -> Benchmark kernel s a t n = let x = testData n in x `deepSeq` bench s $ B run x where run x = apply (a t) x `deepSeq` () kernels :: String -> Ty a -> [Ty a -> Int -> Benchmark] -> Int -> Benchmark kernels s t bs n = bgroup s [b t n | b <- bs] data KTree = KGroup String [KTree] | KModule String String kgroup :: String -> [Int -> Benchmark] -> Int -> Benchmark kgroup s fs n = bgroup s [f n | f <- fs] klist :: [Int -> Benchmark] -> Int -> [Benchmark] klist fs n = [f n | f <- fs] infixr 5 >++< (>++<) :: (Int -> [Benchmark]) -> (Int -> [Benchmark]) -> Int -> [Benchmark] (>++<) f g n = f n ++ g n