我有以下特点..。
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))
}
}
}
}
}
}我想为这个特性定义Apply、Applicative,甚至Monad实例,但是所有这些类型类都是Functor的扩展。这些类型类的版本是否存在于Cats中,用于反变函子?
发布于 2018-07-12 13:25:50
Applicative在Haskell中的对比变体是Divisible和cats.ContravariantMonoidal )。不过,我还不能马上确定,在猫的意义上,是否有任何Divisible必须是Monoidal。
对于Monad,Kmett说
https://stackoverflow.com/questions/51306354
复制相似问题