Общее обогащение, обеспечивающее некаррирование в scala

Существует ли общее обогащение для f: A => B => ... => Z в scala/scalaz/shapeless/etc. такой, что f.uncurried:(A, B, ...) => Z?

В настоящее время у меня есть это, но я считаю, что где-то должно быть уже существующее более общее решение.

implicit def enrichMyCurriedFunction[A, B, C] = new EnrichedCurriedFunction[A, B, C](_)

class EnrichedCurriedFunction[A, B, C](f: A => B => C) {
  def uncurried: (A, B) => C = (a, b) => f(a)(b)
}

person drstevens    schedule 11.12.2012    source источник


Ответы (1)


Там действительно есть встроенная функция:

val foo = (x: Int) => (y: Int) => x+y
foo: Int => (Int => Int) = <function1>

Function.uncurried(foo)
res16: (Int, Int) => Int = <function2>
person drexin    schedule 11.12.2012