如何运行monadic函数的标准基准

时间:2017-08-25 17:16:54

标签: haskell microbenchmark

使用criterion库我想要使用Monad m => a -> m b类型对函数进行基准测试。

以下是来自jsaddle库的 JSM monad的典型示例:

import           Criterion.Main
import           JSDOM.Types (JSM)
import           GHCJS.Buffer (Buffer(..))
import qualified Data.ByteString as BS (ByteString)

main :: IO ()
main = defaultMain [
  bgroup "Image" [ bench "buildBS"  $ nf buildBS 256
                 , bench "toJsBuff" $ nfIO (toJsBuff img)
                 ] ]

img :: BS.ByteString
img = id $! buildBS 256

buildBS :: Int -> BS.ByteString
buildBS = undefined

toJsBuff :: BS.ByteString -> JSM Buffer
toJsBuff bs = undefined

现在这不能编译,因为函数nfIO仅适用于IO monad而不适用于任何monad。

如何对这样的monadic函数进行基准测试?

注意:当我使用nf而不是nfIO时,还会出现编译时错误。

0 个答案:

没有答案