IO monad中replicateM的性能

时间:2017-05-03 19:20:59

标签: performance haskell io monads

我有一个名为action的IO动作,其中我正在进行相当繁重的计算。我正在使用IO monad,以便在计算中更容易访问随机数。

我还有以下函数来复制动作并取结果的平均值。因为这个动作需要相当长的时间才能完成,所以我想知道以这种方式进行采样会对性能产生什么影响。在评估的后期进行采样会不会更好,这样每个样本的相同部分程序都不会重复,或者Haskell编译器是否已对此进行了优化?

samp :: (Fractional b) => Int -> IO b -> IO b
samp n action = do
  samples <- replicateM n action
  return $ mean samples

mean :: (Fractional a) => [a] -> a
mean as =  s / (genericLength as)
  where s = sum as

0 个答案:

没有答案