[英]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))
}
}
}
}
}
}
我想为此特性定义Apply
, Applicative
甚至Monad
实例,但是所有这些类型类都是Functor
扩展。 这些类型类的版本在Cats中是否存在逆函子?
的逆变等效Applicative
在Haskell是Divisible
和cats.ContravariantMonoidal
允许同时定义它的方法( divide
被contramap2
, conquer
是trivial
) 。 但是,我不能立即确定,是否有任何Divisible
必须在猫的意义上是Monoidal
。
对于Monad
,Kmett说
还有单调单子吗? 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.