このチュートリアルでは、次のスニペットを見つけました。
deposit :: (Num a) => a -> a -> Maybe a
deposit value account = Just (account + value)
withdraw :: (Num a,Ord a) => a -> a -> Maybe a
withdraw value account = if (account < value)
then Nothing
else Just (account - value)
eligible :: (Num a, Ord a) => a -> Maybe Bool
eligible account =
deposit 100 account >>=
withdraw 200 >>=
deposit 100 >>=
withdraw 300 >>=
deposit 1000 >>
return True
main = do
print $ eligible 300 -- Just True
print $ eligible 299 -- Nothing
関数がどのように機能するのか理解できません>>=
。Maybe a
最初は、最初のパラメーターとして値を取ります。deposit 100 account >>=
その後、しかし、それはa -> Maybe a
最初のパラメータとしてとられるようです:withdraw 200 >>=
これはコンパイラによってどのように承認されるのでしょうか?常に最初のパラメータとして>>=
とるべきではありませんか?Maybe a
考えられる解決策は、>>=
関数の優先順位が次のように機能する場合です。((a >>= b) >>= c) >>= d
しかし、私が知る限り、それは反対です。a >>= (b >>= (c >>= d))