Haskell の "(>>=) Just" の型の意味を教えてください

こんにちは。

意図せず関数モナドのインスタンスを利用していることで混乱しているようですね。
実はモナドの m には (->) x を入れる事ができ、m ax -> a となることができるのです。

質問の例について、型を順番に追いかけてみましょう。
(>>=) の型は m a -> (a -> m b) -> m b で、これに Just :: x -> Maybe x を適用するわけなので、まずは m ax -> Maybe xを当てはめることを考えます。
とすれば、このとき aMaybe xに、m(->) x になるわけですね。
これを (>>=) の残りの型に当てはめると、(a -> m b)(Maybe x -> (x -> b))m b(x -> b) になります。
というわけで、(>>=) Just の型は (Maybe x -> x -> b) -> x -> bであり、 xa に読み替えれば質問に書かれた型になるわけです。

これにさらに pure :: a -> f a を適用することを考えます。
(Maybe x -> x -> b) に当てはめるには、aMaybe x となり、f(->) x なので、pure(Maybe x -> x -> Maybe x) となります。
これにより、(>>=) JustbMaybe x であることがわかるので、最終的に (>>=) Just pure の型は x -> Maybe x に決定します。

コメントを投稿

0 コメント