我正在尝试创建一个执行并行评估的简单示例:
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中构建这样一个简单的例子呢?
答案 0 :(得分:2)
问题在于你使用lambdas的方式。 rpar
和rseq
的类型是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: