首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猫中反变函子的应用、应用、Monad等?

猫中反变函子的应用、应用、Monad等?
EN

Stack Overflow用户
提问于 2018-07-12 12:59:37
回答 1查看 101关注 0票数 0

我有以下特点..。

代码语言:javascript
复制
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中,用于反变函子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 13:25:50

Applicative在Haskell中的对比变体是Divisiblecats.ContravariantMonoidal )。不过,我还不能马上确定,在猫的意义上,是否有任何Divisible必须是Monoidal

对于Monad,Kmett说

There is no contravariant Monad-like. You need C -> C, not C -> C^op. The twist denies you the ability to build nice structure.

还有Are there contravariant monads?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51306354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档