4

では、このコモナドのエンコーディング (以下を参照) を考えると、それより上のコモナドの法則は正しいのでしょうか? なんらかの理由で、彼らはそれらを見ているとは思いません。そこから間違って進むと悪い道しか生まれないことを知っているので、ナッジ、ヒント、ヘルプ、答えをいただければ幸いです。

      /**
       * note: I think these are right
       * Comonad Laws
       * 
       * (i)   counit(cojoin(m))      == m
       * 
       * (ii)  >>(counit(m))(cojoin)  == m
       * 
       * (iii) cojoin(cojoin(m))      == >>(cojoin(m))(cojoin)
       * 
       */

        trait Comonad[M[_]] {

           // map
           def >>[A,B](a: M[A])(f: A => B): B

          // extract | coeta 
          def counit[A](a:M[A]): A

          // cobind | =<< | extend
          def coflatMap[A,B](ma:M[A])(f: M[A] => B): M[B]

          // coflatten | comu
         def cojoin[A](a: M[A]): M[M[A]]
        }
4

1 に答える 1