A => Option[B] と Option[A] => B を表すtraitが scalaz に入ったけど、わざわざ入れるほど便利なのかな・・・ https://t.co/9M5L5f7dqN https://t.co/A5lYFnmjJ0
2013-05-22 15:03:11そうか、 Scala の Map の withDefaultValue とか withDefault って、apply に対して有効になるだけで、getやisDefinedAtなどのほかのメソッドの動作は全部変えないんだっけ、忘れてた・・・
2013-05-23 15:24:03Mapがモナドにならない?のに、A => Option[B]という関数はモナドになる? ことの違いを考えてるんだけど、よくわからない。有限集合か無限集合の違い? それとも「Mapがモナドにならない」もしくは「A=>Option[B]という関数はモナド」のどちらかは間違ってる?
2013-05-23 15:41:08A => Option[B] がモナドになるってどういう事だろう。A => Option[B] の Kind は * -> * -> * だけどモナドになるってことは * -> * にする必要がありそうだけど。AかBのどちらかは固定されてるのかな?
2013-05-23 15:55:54@gakuzzzz これです https://t.co/DnwDC652Zq 昨日この記事書いて http://t.co/4iZYLahJNY 「Mapはモナドにならないことが判明した?」けど、このNullResultはモナド則満たしてるような気がするし、あれ・・・と思って
2013-05-23 15:58:33@gakuzzzz Scalaなら自分で決められるし、(あまり自信ないですけど)Haskellも自分で決められるんじゃないんですかね?ちなみにScalazの場合、普通のFunction1もモナドになってるみたい https://t.co/gkPqzCp7Ue
2013-05-23 16:00:33そもそも「Mapとはなんなのか(どういうメソッドを持っていて、lawがあるのか、lawがあるならどういうlawをみたすのか)」という前提条件を定義しないことには、なんか意味がない気がしてきた
2013-05-23 16:03:08@xuwei_k あ、たしかに自分で実装するなら好きに決められますね。確か標準実装でモナドインスタンスがあったような気がしてたので。 Scalaz の Function1 も引数側が固定な感じですねー
2013-05-23 16:03:16もし「A => Option[B]がモナドになる」として、 A => Option[B] という関数から自然なScalaのMap[A, B]が構築できれば、Mapもモナドになるだろうけど、関数からScalaのMap構築しようとした場合に、sizeメソッドどうするの?とか色々問題が
2013-05-23 16:06:14@xuwei_k Mapというのはそもそもpartial functionだと思うと、A => Option[B] はMapと考えて良いのでは
2013-05-23 16:08:34Mapのbind定義するのにcollectとかapplyとかisDefinedAt使ってしまったので https://t.co/14vBdQlwen 「関数からScalaのMapを構築しようとしたとき」にそれらのメソッドを自然に定義できるのか?という問題が。あと等価性とかも
2013-05-23 16:09:59@xuwei_k 例えば無限リストに length は無いけど、List と(ほとんど同じと)思って良いみたいな?
2013-05-23 16:10:01.@tmiya_ そうですね・・・。すると、Monadの関数使って生成したMapは「lengthが未定義、もしくは無限、つまり例外投げるかもしれない」とかなるけど、そういうものを許容するのかというのが問題になるってことですかね?
2013-05-23 16:12:36Map[A, B]をA => Option[B]として捉えて定義すれば、とりあえずMapをモナドにすることは可能かもしれないけど、そうすると色々なメソッドが定義できない壊れたMapになるから、実用的にはそんな風にMapのモナドを定義しても使えないから定義しない。 で、いいのかな
2013-05-23 16:20:10@xuwei_k partial functionの合成ってmonadのbindだよね、というだけの話なんですかね... Mapの本質が、「キーに応じて値を返せたり返せなかったりである」「登録されている要素を列挙出来たり総数を返せることは本質で無い」と考えればあるいは。
2013-05-23 16:26:05