最近Haskellの勉強をしています。
モナドについて分からない点があるので教えてください。
[参考サイト]
箱で考えるFunctor、ApplicativeそしてMonad
1,returnについて。
return :: a -> m a
この関数の文脈mというのは、前後の文脈によって推論されるのでしょうか??
例えば、3つ例を上げます。
Haskell
1return "WHAT" :: Maybe String 2Just 9 >>= \x -> return (x * 10) 3return (0, 0) >>= landLeft 1 >>= ...
一番上は明示的に型を与えているので大丈夫ですね。
2番めは>>=
の左辺のJustから推論されてMaybe型になるということで良いんですよね?
3番めはモナド則があるので推論しなくても良さそうですが・・・これは実際には右辺のモナドから推論されるんですか?
2,モナドの連結について。
>>= :: m a -> (a -> m b) -> m b
これは、1つのモナドに関してのみ連結できるという意味で合ってますか?
例えば、Maybe型 >>= State型 というふうに別のモナドを複数連結させることって可能なのでしょうか?
m
と書かれていて両辺の型が同じなので、おそらくコレは出来ないものだと考えているのですが、自分の理解で正しいでしょうか?
それに近いものは見つけました↓
MaybeとStateを合成
もし2の質問が正しくて異なる複数のモナドを連結可能でしたら、returnの文脈の型はどうなるのでしょうか?
3,モナドの文脈を外すことはできるのでしょうか?
どこかで、
値を一度モナドの文脈に入れた場合文脈を外すことはできない。
みたいな事が書かれているのを見かけたのですが、これは正しいのでしょうか?
どこに書かれていたか忘れてしまったので、記憶が曖昧なのですが・・・
Maybeモナドみたいなのだとパターンマッチで値を取り出すことができそうですが、任意のモナドに関して一般的にはできないですよね?例えば、IOとか??
わかる方いたら教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/08 07:41