繁体   English   中英

适用于猫的逆变函子,适用,Monad等?

[英]Apply, Applicative, Monad, etc for contravariant functors in cats?

我具有以下特征...

import cats._
import cats.implicits._

trait Preference[-A] {
  self =>

  def compare(a1: A, a2: A): Int

  final def ordering[A1 <: A]: Ordering[A1] = {
    new Ordering[A1] {
      def compare(a1: A1, a2: A1): Int = {
        self.compare(a1, a2)
      }
    }
  }

}


object Preference {

  implicit val contravariant: Contravariant[Preference] = {
    new Contravariant[Preference] {
      def contramap[A, B](fa: Preference[A])(f: B => A): Preference[B] = {
        new Preference[B] {
          def compare(b1: B, b2: B): Int = {
            fa.compare(f(b1), f(b2))
          }
        }
      }
    }
  }
}

我想为此特性定义ApplyApplicative甚至Monad实例,但是所有这些类型类都是Functor扩展。 这些类型类的版本在Cats中是否存在逆函子?

的逆变等效Applicative在Haskell是Divisiblecats.ContravariantMonoidal 允许同时定义它的方法( dividecontramap2conquertrivial 但是,我不能立即确定,是否有任何Divisible必须在猫的意义上是Monoidal

对于Monad ,Kmett说

没有Monad之类的反变。 您需要C-> C,而不是C-> C ^ op。 扭曲使您无法构建良好的结构。

还有单调单子吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM