5

我正在尝试创建一个进行并行评估的简单示例:

import Control.Parallel.Strategies

main = do
  runEval $ do
    a <- rpar (\x -> x + 5)
    b <- rseq (\x -> x + 15)
    return (a, b)

它说

Couldn't match expected type `IO t0'
                with actual type `(Integer -> Integer, Integer -> Integer)'

我知道,它与 Haskell 中的并行性无关,但是,我如何在 Haskell 中构建这样一个简单的示例?

4

1 回答 1

2

问题在于您使用 lambda 的方式。rparrseqisa -> Eval a但您传递的 lambda的类型显然具有类型Integer -> Integer,因为您没有将参数传递给 lambda。

像这样编译(另请注意,您需要打印结果):

main = do
    print $ runEval $ do
        a <- rpar $ (\x -> x + 5) 4
        b <- rseq $ (\x -> x + 15) 4
        return (a, b)

了解有关 Haskell 中并行处理的更多信息。Simon Marlow有一本很棒的书,名为“Haskell 中的并行和并发编程”,HTML 版本可在此处免费获得:

于 2013-10-25T06:53:44.990 回答