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