一些和无等人的猫实例



在 Scala 2.13 和 Cats 中,以下工作正常:

import cats.implicits._
Traverse[Option]

但是,以下操作将失败:

import cats.implicits._
Traverse[Some]

我希望后者不仅适用于 Traverse of Option 子类,也适用于任何具有存在给定类型类的父级的类型。

我尝试使用隐式证明 <:<创建一个方法,但无法完全使其工作。>

如果你真的明白你做什么,你可以手动定义必要的实例(如果存在(。

SomeId同构。

implicit val someTraverse: Traverse[Some] = new Traverse[Some] {
override def traverse[G[_]: Applicative, A, B](fa: Some[A])(f: A => G[B]): G[Some[B]] = f(fa.value).map(Some(_))
override def foldLeft[A, B](fa: Some[A], b: B)(f: (B, A) => B): B = f(b, fa.value)
override def foldRight[A, B](fa: Some[A], lb: Eval[B])(f: (A, Eval[B]) => Eval[B]): Eval[B] = f(fa.value, lb)
}

一般来说,这是不可能的。如果F是所有T的函子和G[T] <: F[T],那么G不一定是函子。

使用子类(cats/scalaz(使用函子调用泛型函数

此外,有时您可以使用小猫派类型类。

为什么可以找到树的"Functor"实例,而找不到分支或叶子的"Functor"实例?

相关内容

  • 没有找到相关文章

最新更新