ScalazのMonad則
モナド則を満たしてるかどうかを調べる仕組みがscalazにあるけどhaskellにそういう仕組みあるのかなって話をしてる
2013-11-28 20:24:56@masterq_teokure 満たすようにインスタンスを定義しないとモナドにならない気が
2013-11-28 20:30:57@yadokarielectri モナドにはならないですよ。でもテストするしくみがあるというのは「いつでもモナド則をみたすかテストできる」とは信じがたいなと。
2013-11-28 20:31:52@masterq_teokure なんかscalazではできるみたいな話をしてました。聞き間違えてるのかな
2013-11-28 20:36:17@yadokarielectri どうやってscalazでモナド則のテストをしているのか気になります。。。あ、やっぱ気にならないかも。。。
2013-11-28 20:36:54ちょっとScalaの怖い人に、オブジェクト指向的に継承して13個の実装を実装しなければならないのは、モナド則を満たせばモナドでOKというHaskellの話とどうちがうのか、ご教授が欲しい。さっきの発表で気になったのはそのあたり #fud_scala
2013-11-28 20:39:11なにがいいたいかというと、みんなATSやろう http://t.co/AhlLrbs0dX #scalaz #scala #Haskell #OCaml #SMLsharp #Coq
2013-11-28 20:40:29@masterq_teokure @yadokarielectri Scalacheck(HaskellのQuickcheck相当)で雑に引数生成してやってるだけです。証明とは程遠いので完全ではないですが、やらないよりはましというか。実際にそれのお陰で何回かバグ見つかってるので
2013-11-28 20:42:07@xuwei_k @yadokarielectri なるほど。quickcheck使うなら理解できる気がします。
2013-11-28 20:43:02@xuwei_k @yadokarielectri うーん。IOモナドっぽいないにかをrunMyIOみたいので結合する場合はどーするんでしょうね。。。
2013-11-28 20:43:56@xuwei_k @yadokarielectri Scalaでは全ての型は中身を検査できるんですか???
2013-11-28 20:44:54.@esehara 「13個の実装を実装しなければならない」ではなく「13個の法則を満たさなければならない」で、しかも「明示的にデフォルト実装をoverrideしない限り(主にパフォーマンスのためにoverrideすることがある)、13個のうちのほとんどは満たす」ですね
2013-11-28 20:49:13@xuwei_k お返事ありがとうございます。「その辺の13個の法則を満たさなければならない」という部分がしっくりこないんですね。haskell上のモナド則自体は3つのはずなのに、急に付随する10個が出てくるかつ「ほとんど(3つではなく?)」というのがもやっとしています。
2013-11-28 20:55:51.@esehara Haskellでも(よっぽど使い捨てのコードでない限り)Monadのインスタンスを実装したら、そのMonadと整合性があるFunctorとApplicativeのインスタンスを実装すると思うので「それらすべてが満たすべき法則」は3つではなく増える、と思います
2013-11-28 20:58:21@esehara 言い換えると、その13個のうちのいくつかは「Functor則」や「Applicative則」と呼ばれてるものそのものです。あとは「FunctorとMonadのメソッドに整合性がある」とかそういうものです
2013-11-28 21:01:12@xuwei_k ご丁寧な解説感謝致します。Scalazだと、「Monad則」だけでなく、「Functor則」「Applicative則」というMonadを使うために、「Monad」という型クラスで満たさなければならない(既に満たされている)法則が含まれていると、理解しました。
2013-11-28 21:12:07ちょっと自分の中で反省会。確かにHaskellのモナド則を利用してモナドを説明するのは、必要最小限でいいんだけど、そのモナド則の表現自体がHaskellの言語仕様と密接だから、その辺を噛み砕かないと、余計な混乱を招く感じはある(自分もよくやる)。
2013-11-29 00:58:33怖いScalaで、Scalazのモナドの話を聞いて、俄然興味が出てソースコードを読んだけど、クソ面白い。特にオブジェクト指向と関数型の違いについて、HaskellのBasic Library ( http://t.co/eKEH0SZSZ1 ) と合わせると凄いヒントになる。
2013-11-29 13:08:16