私はshowed you these operatorsの人ですから、なぜ私がそれらを使用したかについて簡単に説明します。レビューに
、ファンクタは、あなたが「ラップ」の値に関数を適用するfmap
機能を使用することができますタイプのコンストラクタです。 型のコンストラクタ(この場合は部分的に適用されますが、この場合はString
)では、Right
の値に関数を適用できますが、値がLeft
(エラー)の場合は無視されます。これは、エラーをチェックすることなく、エラー伝播の方法を提供します。機能自体はちょうどそれが適用される引数のようにラップすることができます以外
fmap f (Right x) = Right (f x)
fmap f (Left y) = Left y
のApplicativeファンクタは、類似しています。 <*>
演算子は、右オペランドのみをアンラップするfmap
とは異なり、そのオペランドの両方をアンラップします。
Right f <*> Right x = Right (f x)
Left f <*> _ = Left f
_ <*> Left y = Left y
一般的には、機能を自分でラップしない:彼らは部分的に包まれた値に関数を適用するfmap
を使用してから生じる:だから
fmap (+) (Right 3) == Right (+ 3)
fmap (+) (Left "error") == Left "error"
、我々はEither
値を操作しているとき、 <$>
(接尾辞fmap
)と<*>
を使用すると、Left
またはRight
で囲まれているかどうかを心配することなく、通常の値で作業しているようです。 Right
の値は、予想される応答を提供し、Left
の値は保持されます。バイナリ演算子の場合は、最初のLeft
値だけが返されますが、これで十分です。最後に
(+) <$> Left "x undefined" <*> Left "y undefined" == Left "x undefined" <*> Left "y undefined"
== Left "x undefined"
(+) <$> Left "x undefined" <*> Right 9 == Left "x undefined" <*> Right 9
== Left "x undefined"
(+) <$> Right 3 <*> Left "y undefined" == Right (+ 3) <*> Left "y undefined"
== Left "y undefined"
(+) <$> Right 3 <*> Right 9 == Right (+3) <*> Right 9
== Right 12
、Either String
のApplicative
インスタンスを使用すると、私たちはeval
のいずれかの再帰呼び出しが実際に成功した場合には明示的にチェックすることなく、2つの部分式の評価結果を結合することができます。成功した再帰呼び出しは成功に終わります。いずれかのコールのエラーがトップレベルコールの同じエラーとして使用されます。
あなたはHoogleまたはHayooでそれらを検索する必要があります。 – dfeuer
検索方法がわかりません –
まず、Googleで検索してください。検索フィールドに入力した演算子を入力します。 – dfeuer