アレッ*_*ックス 5 parallel-processing haskell
我正在尝试创建一个执行并行评估的简单示例:
import Control.Parallel.Strategies
main = do
runEval $ do
a <- rpar (\x -> x + 5)
b <- rseq (\x -> x + 15)
return (a, b)
Run Code Online (Sandbox Code Playgroud)
它说
Couldn't match expected type `IO t0'
with actual type `(Integer -> Integer, Integer -> Integer)'
Run Code Online (Sandbox Code Playgroud)
我知道,它与Haskell中的并行性无关,但是,我如何在Haskell中构建这样一个简单的例子?
问题在于您使用 lambda 的方式。rpar和 的类型rseq是,a -> 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)
Run Code Online (Sandbox Code Playgroud)
了解有关 Haskell 中并行处理的更多信息。Simon Marlow写了一本很棒的书,名为“Haskell 中的并行和并发编程” ,HTML 版本可在此处免费获得:
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |