为什么我的Haskell snd实现无法在Scala中编译?

时间:2018-07-22 22:02:00

标签: scala tuples arity

我根据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

1 个答案:

答案 0 :(得分:0)

方法reducereduceOption需要具有偶数2的函数,而不是采用元组的一元函数。

两者之间有区别

Function1[(X, Y), Z]

Function2[X, Y, Z]

第一个是一元且采用元组,第二个是二进制。方法及其eta扩展同样适用。

这在这里工作正常:

def twoArgSnd[T](a: Any, b: T): T = b 

list.reduceOption(twoArgSnd[Int])

也相关:

  1. Why is scala.collection.immutable.List[Object] not GenTraversableOnce[?]