为什么我的 Haskell 实现而不是在 Scala 中编译?
Why does my implementation of Haskell snd not compile in Scala?
我按照 Haskell snd
定义了以下函数
def snd[T](pair: (_, T)): T = pair._2
尝试将它与 List[ListNode[T]]
一起使用无法编译。为什么不呢?
list
.reduceOption(snd)
其中:
case class ListNode[T](data: T, var next: Option[ListNode[T]])(implicit ordering: Ordering[T]) extends Ordered[ListNode[T]] {...}
错误:
Type mismatch, expected: (NonInferedA1, NonInferedA1) => NonInferedA1, actual Tuple2[_, Nothing] => Nothing
方法 reduce
和 reduceOption
需要具有元数 2
的函数,而不是采用元组的一元函数。
有区别
Function1[(X, Y), Z]
和
Function2[X, Y, Z]
第一个是一元的,取一个元组,第二个是二元的。同样适用于方法及其 eta 扩展。
此处按预期工作:
def twoArgSnd[T](a: Any, b: T): T = b
list.reduceOption(twoArgSnd[Int])
还相关:
- Why is
scala.collection.immutable.List[Object]
not GenTraversableOnce[?]
我按照 Haskell snd
定义了以下函数def snd[T](pair: (_, T)): T = pair._2
尝试将它与 List[ListNode[T]]
一起使用无法编译。为什么不呢?
list
.reduceOption(snd)
其中:
case class ListNode[T](data: T, var next: Option[ListNode[T]])(implicit ordering: Ordering[T]) extends Ordered[ListNode[T]] {...}
错误:
Type mismatch, expected: (NonInferedA1, NonInferedA1) => NonInferedA1, actual Tuple2[_, Nothing] => Nothing
方法 reduce
和 reduceOption
需要具有元数 2
的函数,而不是采用元组的一元函数。
有区别
Function1[(X, Y), Z]
和
Function2[X, Y, Z]
第一个是一元的,取一个元组,第二个是二元的。同样适用于方法及其 eta 扩展。
此处按预期工作:
def twoArgSnd[T](a: Any, b: T): T = b
list.reduceOption(twoArgSnd[Int])
还相关:
- Why is
scala.collection.immutable.List[Object]
notGenTraversableOnce[?]