2017-02-10 18 views
4

次は、しかし、私はJust x...線で混乱していますHaskell tutorial結果をMonadにバインドする必要がありますか?

instance Monad Maybe where 
    return x = Just x 
    Nothing >>= f = Nothing 
    Just x >>= f = f x 
    fail _ = Nothing 

の例です。結果はモナドではないでしょうか?私はその行を期待しています

Just x >>= f = Just (f x) 
+6

ヒント: 'f'の種類は何ですか? – duplode

+1

@ duplodeのヒントに追加するには、 '> ='があなたの提案通りに実装されていれば、 'flip fmap'と変わりありません。実際、これは '' = 'と' 'fmap'の間のパワーの違いです。 –

+0

つまり、 'f'はすでに' Maybe b'の値、すなわち 'Just(y :: b)'または 'Nothing'を作成しています。そうでない場合、コードは型チェックを行いません。 –

答えて

9

はい!あなたはモナドであることが正しいですが、>>=演算子のタイプを覚えておいてください:m a -> (a -> m b) -> m b。次にfa -> m bの型を持っていると推測されますので、fxに適用すると、結果としてモナドが返されます。

+2

ようこそStackOverflowへ! – Alec

関連する問題