- Companion
- object
Value members
Concrete methods
How to handle arguments? We want keep evaluation order from left to right, so, imagine we have function f(a1,a2,a3) and a2 is async, a1, a3 - sync. we will transform this to
How to handle arguments? We want keep evaluation order from left to right, so, imagine we have function f(a1,a2,a3) and a2 is async, a1, a3 - sync. we will transform this to
{ val arg1 = a1;
transform(a2).flatMap( x =>
{ val arg2 = x;
val arg3 = a3;
f(arg1, arg2, arg3)
} }
more generally we at first generate block: { arg1 = a1; ..... argN = aN; f(arg1,...argN) } and then transform one, knowing that all arguments to f are sync (of course, if all arguments are sync, we just call f(arg1,... arg2) without all this machinery)
- Value Params
- applyTerm
= Apply(fun, args) - origin apply
- args
- first argument list
- fun
- function to apply (with type-paerameters)
- tails
- next argument lists if any
- unpure
- if true, that this is call from shifted substitution, which is already return F[_] by design.
applyTerm = Apply(fun, args) fun = TypeApply(obj,targs)
applyTerm = Apply(fun, args) fun = TypeApply(obj,targs)
case Apply(fun,args) transform application
case Apply(fun,args) transform application
tails -- list of prepared sequence of curried arguments.