( недействительный )
Каков наилучший способ частичной замены аргументов в карри функции для Units:
trait Expr[A] { def apply : A }
type Reaction[A] = A => Unit
type TypedReactor[A] = Expr[A] => Reaction[A] // aka Expr[A] => A => Unit
type FlatReactor = () => () => Unit
def flatten[A](e: Expr[A], r: TypedReactor[A]): FlatReactor = ???
Таким образом, карри Function1
необходимо преобразовать слева направо в карри Function0
.
Следующее работает, но выглядит довольно неловко:
def flatten[A](e: Expr[A], r: TypedReactor[A]): FlatReactor = () => {
val unc = r(e); val eval = e.apply; () => unc(eval)
}
EDIT
Извините, произошла ошибка. Функция сглаживания на самом деле выглядит так:
def flatten[A](e: Expr[A], r: Reaction[A]): FlatReactor = () => {
val eval = e.apply; () => r(eval)
}
Так что я не думаю, что это может быть проще, чем это.