【发布时间】:2021-06-24 07:38:52
【问题描述】:
看看下面的代码:
case class MyTypeConstructor[T[_]: Seq, A](mySeq: T[A]) {
def map[B](f: A => B): T[B] = mySeq.map(f) // value map is not a member of type parameter T[A]
}
case class MyTypeBounds[T[A] <: Seq[A], A](mySeq: T[A]) {
def map[B](f: A => B): T[B] = mySeq.map(f)
}
理想情况下,两者都会做同样的事情,只需定义一个虚拟的map,它从Seq 调用map 方法。然而,第一个没有事件编译,而第二个工作(实际上第二个也不起作用,但为了简单起见,我省略了一些东西)。
我得到的编译错误是T[A] 没有成员map,但我很奇怪,因为类型构造函数T 应该返回一个Seq(它确实有map)。
谁能解释一下这两种实现在概念上有何不同?
【问题讨论】:
-
你想要的是一个 typeclass 和来自 cats 的准时
Functor。 -
@LuisMiguelMejíaSuárez 哈哈,我从 Reddit 认识你。谢谢你再次回答。是的,我知道函子和猫。我其实并不关心这个例子,我只是想了解类型构造函数和类型绑定之间的概念区别。
标签: scala types functional-programming type-parameter type-constructor