2016-07-09 11 views
0

における並列並行プログラミングからevalPair`は、与えられた `レビュー:はHaskellの

import Control.Parallel 
import Control.Parallel.Strategies 

evalPair :: Strategy a -> Strategy b -> Strategy (a, b) 
evalPair sa sb (a, b) = do 
    a' <- sa a 
    b' <- sb b 
    return (a', b') 

Parallel and Concurrent Programming in Haskellから。

(a, b)がどこから来ているのか分かりません。すなわち、第3引数evalPairです。 Strategy型エイリアスなし

再書き込み機能:私はまだ(a, b)引数を理解していない、

evalPair' :: (a -> Eval a) -> (b -> Eval b) -> Strategy (a, b) 
evalPair' sa sb (a, b) = do 
    a' <- sa a 
    b' <- sb b 
    return (a', b') 

しかし:

*Main> :i Strategy 
type Strategy a = a -> Eval a 
     -- Defined in `Control.Parallel.Strategies' 

ことがあります。なぜevalPairのタイプシグネチャが表示されません:Strategy a -> Strategy b -> (a, b) -> Strategy b

+2

'Strategy'型エイリアスのすべての出現を' evalPair''に書き換えるのを忘れました。それはあなたに答えを与えるはずです。 –

答えて

3

Strategy (a,b)は、(a,b) -> Eval (a,b)の機能であることに注意してください。

のでevalPair'のための署名を書いている別の方法は次のとおりです。右に関数適用を関連付けて以来

evalPair' :: (a -> Eval a) -> (b -> Eval b) -> ((a,b) -> Eval (a,b)) 

、我々は括弧の最後のペアを削除することができます。パラメータを一致させると、

evalPair' :: (a -> Eval a) -> (b -> Eval b) -> (a,b) -> Eval (a,b) 
evalPair'  sa    sb   (a,b) = do 
    ... 
    return (a', b') 

のようになりますので、(a,b)のペアがあります。