Haskell中的并行性

时间:2013-10-25 06:28:32

标签: haskell parallel-processing

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

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中构建这样一个简单的例子呢?

1 个答案:

答案 0 :(得分:2)

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

像这样的东西编译(还要注意你需要打印结果):

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

要了解有关Haskell中并行处理的更多信息。 Simon Marlow有一本名为"Parallel and Concurrent Programming in Haskell"的好书,HTML版本免费提供here