Этот код компилируется и запускается без проблем:
module Main where
import Criterion.Main
main :: IO ()
main =
defaultMain
[env (return $ [1,2])
(\is ->
bgroup "group" (benchmarks is))]
timesTwo :: Int -> Int
timesTwo i = 2 * i
benchmarks :: [Int] -> [Benchmark]
benchmarks is = [ bench "foo" $ nf timesTwo (is !! 0)
, bench "foo" $ nf timesTwo (is !! 1) ]
Тем не менее, если я изменяю функцию benchmarks
на
benchmarks :: [Int] -> [Benchmark]
benchmarks is = map (\i -> bench "foo" $ nf timesTwo i) is
, она все равно компилируется, но я получаю эту ошибку времени выполнения:
ghci> main
*** Exception: Criterion atttempted to retrieve a non-existent environment!
Perhaps you forgot to use lazy pattern matching in a function which
constructs benchmarks from an environment?
(see the documentation for `env` for details)
Как мне решить эту проблему?
Как вы можете видеть, Моя цель состоит в том, чтобы отобразить список из полученных из среды, чтобы превратить его всписок Benchmark
s , который я могу использовать с Criterion.
Примечание: в конечном итоге я хочу использовать гораздо больше элементов, чем просто два, поэтому кортежи здесь не то, что я хочу.