- 関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
87 :デフォルトの名無しさん[]:2015/07/23(木) 09:38:20.27 ID:UOPnVIxG - Monadでは
>>= :: ma -> (a -> mb) -> mb となっているですが、これは、どうして >>= :: ma -> (ma -> mb) -> mb(つまり普通のapply) ではだめなのでしょうか?
|
- 関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
90 :デフォルトの名無しさん[]:2015/07/23(木) 10:46:01.13 ID:UOPnVIxG - >>88
>>= :: ma -> (a -> mb) -> mb を用意する代わりに、 extract :: ma -> a みたいなのがあれば、普通の関数適用だけでも同じことができるのではないのですか?
|
- 関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
93 :デフォルトの名無しさん[]:2015/07/23(木) 13:06:35.41 ID:UOPnVIxG - >>91
> extract Nothing は何になりますか なるひどこれは困った。。。 >>92 たしかに、fmap と join を基礎にすれば、 >>= はその一手ですね >>= :: ma -> (a -> mb) -> mb の中では、特に、 a -> mb の部分がモナドにとって本質的なんだなと思えてきました
|
- 関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
94 :デフォルトの名無しさん[]:2015/07/23(木) 13:35:05.00 ID:UOPnVIxG - >>92
> そういううまいルールをどうやって設定するかみたいな話をするために圏論を借りてきてる。 「そういううまいルール」とは、どこの事でしょうか?
|
- 関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
95 :デフォルトの名無しさん[sage]:2015/07/23(木) 13:41:38.62 ID:UOPnVIxG - >>92
extract :: ma -> a は存在しない場合があるようですが、 いつも存在しないのですか? また、join :: m(ma) -> ma は必ず存在するのですか?
|
- 関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
99 :デフォルトの名無しさん[sage]:2015/07/23(木) 21:31:05.23 ID:UOPnVIxG - >>96 :デフォルトの名無しさん:2015/07/23(木) 14:03:17.98 ID:9NQb4Eqn
> そういう上手いルール、はモナド則です。 うまいというより、ふつうに定義すればモナド則は満たされるのではないですか? > join :: M(M a) -> M a > の存在は、モナドの構成要件の一つだと言って差し支えないと思います。 joinがそうであるのにextractがそうでないのはなぜでしょうか? まあ、oinは不可欠だが、extractはなくても代わりがあるからだということなのでしょうが
|
- 関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
103 :デフォルトの名無しさん[sage]:2015/07/23(木) 23:19:05.16 ID:UOPnVIxG - > たとえば http://d.hatena.ne.jp/itto100pen/20090710 に、モナド則の一部が満たされない例があります。
ページ紹介ありがとうござます。 そこの return x = [x x] は、(私の思うw)「ふつうの」定義ではないので、 それがモナド則を満たさないのも尤もかなと思いました
|
- 関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
105 :デフォルトの名無しさん[sage]:2015/07/23(木) 23:45:33.49 ID:UOPnVIxG - >>104
モナド則というのがそういうものだという説明ははじめて聞きました。本当ですか?
|