有没有办法编写一个函数(lst:List(T),fun :),它遍历lst并部分地将每个元素应用于fun并每次返回一个新函数并递归执行此操作直到函数的结果应用程序是:期望[T],而不是函数类型?
fun
是一个curried函数
像这样。
def partialAppRec(lst : List[T], fun: ?) =
//pardon the non-exhaustive pattern match
lst match {
case x::xs =>
val test = fun(x)
if (test: Future[T]) return test
partialAppRec(xs, (fun(x) _) )
}
但是什么类型会很有趣?无论如何说有趣:忽略它可能采取的参数。我希望能够接收fun
变量参数但返回Future[T]
。 f : ..=>Future[T]
但我不确定这样的事情是否存在。
有任何提示/建议吗?谢谢。
答案 0 :(得分:1)
Either
怎么样?
trait Fun[T] extends Function[T, Either[Fun[T], Future[T]]]
object Fun {
def apply[T](f: T => Either[Fun[T], Future[T]]) =
new Fun[T] { def apply(t: T) = f(t) }
}
def partialAppRec[T](lst: List[T], fun: Fun[T]): Future[T] = lst match {
case Nil => ???
case head :: tail => fun(head) match {
case Right(fu) => fu
case Left(f) => partialAppRec(tail, f)
}
}