考慮:推理`parMap`
Prelude Control.Parallel.Strategies> :t parMap
parMap :: Strategy b -> (a -> b) -> [a] -> [b]
Prelude Control.Parallel.Strategies> :i Strategy
type Strategy a = a -> Eval a
-- Defined in `Control.Parallel.Strategies'
我的理解則是,parMap
可擴展,具有b -> Eval b
更換b
到:
parMap :: (a -> b -> Eval b) -> (a -> b -> Eval b) -> [b -> Eval b]
這似乎比實例版本更復雜在Parallel and Concurrent Haskell:
parMap :: (a -> b) -> [a] -> Eval [b]
parMap f [] = return []
parMap f (a:as) = do
b <- rpar (f a)
bs <- parMap f as
return (b:bs)
在parMap
的標準庫實現中,Strategy b
的含義是什麼,即a -> b -> Eval b
?
在擴展'parMap'時,你忘記了最後一個'[a]'參數。 – chepner