あぁ、モナドというのは、自己関手の圏におけるモノイド対象なのだな、なるほど。たとえばOptionalでいうと、Optionalはなんらかの型の値を持っていてその型自体が圏なのだけど、その圏であるOptionalからOptionalへの関数、つまり自己関手を対象とした圏の対象、と。
2013-06-28 11:55:43@kis それは恒等モナドであって圏論の一般のモナドやHaskellの一般のモナドではありません。自己関手は圏(型ではありません)から同じ圏への関手です。(続く)
2013-06-28 20:09:53@kis (続き) 例えばHaskellのMaybeはHask圏(Haskellの型を対象として持つ圏。集合の圏みたいなもの)の対象(型)aをHask圏の対象Maybe aに移す関手です。(続く)
2013-06-28 20:10:48@kis (続き) ここでMaybeが関手の合成を積としてモノイドになる、つまりMaybe (Maybe a)→Maybe aとa→Maybe aが存在しモナド則を満たすとき、Maybeはモナドであると言います。
2013-06-28 20:11:24@cocoa_ruto 「自己関手の圏におけるモノイド対象」というのが「恒等モナドであって圏論の一般のモナドやHaskellの一般のモナドではない」ということですか?
2013-06-28 20:13:39@kis OptionからOptionへの関数がモナドになるという部分が恒等モナドで(正確にはOptionに限らずaをaに移す関手が恒等モナド)、自己関手の圏におけるモノイド対象はもっと広いものを指します。そして「自己関手の圏におけるモノイド対象」は圏論における一般のモナドです。
2013-06-28 20:26:10@cocoa_ruto Optionalは一般のモナドではないという指摘でMaybeを例に出されていましたが、Maybeは一般のモナドなのですか?
2013-06-28 20:32:00@kis ああ、OptionalってJavaのOptionalだったのですね。何であるかわからなかったので確実なMaybeを出しただけでOptionalもモナドです。(続く)
2013-06-28 20:41:47@kis (続き) ただ、Java圏(Javaの型を対象として持つ圏)からJava圏への関手であるOptionalがモナドであるという意味であり、Optional型からOptional型への関数がモナドであるという意味ではありません。(続く)
2013-06-28 20:43:00@kis (続き)(厳密にはOptionalを圏とみなしてモナドを無理矢理考えることはできますが、プログラミングにおいてモナドと普段呼んでいるものではありませんし、あまり意味はありません)
2013-06-28 20:46:23@cocoa_ruto それは、この発言で。正確ではないですが。 「OptionalからOptionalへの関数がモノイドになるための条件が、モナド則、かな?」 https://t.co/XTa9mAfzgb
2013-06-28 20:46:27. @kis @cocoa_ruto ここで「Optionalはなんらかの型の値を持っていてその型自体が圏なのだけど」と言及されてますが、「自己関手の圏」といった場合、型は対象の一つであって圏そのものではないように思います https://t.co/LqV7doSI6U
2013-06-28 20:53:11@kis 繰り返しますが、Optionalという、型Tを型Optional<T>に移すモノは関手ですが、Optional<T>からOptional<R>への関数は(T=Rの場合も含めて)関手ではありません。
2013-06-28 20:54:48@NaOHaq @cocoa_ruto 「自己関手の圏」といった場合に、型は対象の一つではあるけど、圏になってないと関手にならない、ということはありませんか?
2013-06-28 20:57:57@cocoa_ruto 「Optionalの格納する値をOptilnaiに移す関数がモノイドになるための条件」であってますか?それと気になるのは、「一般のモナドではない」としてMaybeをだされていたのですがMaybeは「一般のモナド」なのでしょうか?ここが非常に気になっています
2013-06-28 21:00:52@kis @NaOHaq 自己関手Fは圏Cを圏Cに移すと言った場合の圏C(Java圏など)と、自己関手の圏と言った場合の「圏」は別で、自己関手の圏とは自己関手を対象としてその間の自然変換を射とする圏です。
2013-06-28 21:10:03@kis モナドを定義するためのモノイド対象は、集合論的な定義ではなく圏論的な定義のモノイドですねー。OptionalからOptionalへの関数はendomorphismなので当然モノイドになりますが、これは自己関手圏のモノイドではないのでちょいと話が違います。
2013-06-28 21:11:32メモ: [PDF] 関数型プログラマのためのモナド理論 - Takeichi Lab http://t.co/wc9HWxhe9h
2013-06-28 21:13:04@kis 話がこんがらがってきたのでもう一度kisさんが考える「Optional(なりその関数)がモナドとなる」ということの意味を整理して1つの文にしていただけますか。
2013-06-28 21:16:01@hiratara モノイドは、Mの要素に対する演算*があって、Mの要素a,b,c,eがあって、(a*b)*c=a*(b*c)、a*e=a=e*aになる(M,*,e)っていうのであってますか?
2013-06-28 21:16:16@cocoa_ruto @kis とりあえず、Maybe/Optional の場合は、MaybeやOptionalそのものが関手ですね。join とか return は自然変換という理解でいいのかしら?
2013-06-28 21:17:03メモ: [PDF] 関数型プログラマのためのモナド理論(2) - Takeichi Lab http://t.co/LVXdo1PUkz
2013-06-28 21:18:49