What is the meaning of "?=>" in Scala 3?
I cannot find explanation of the following syntax rule:
FunType ::= FunTypeArgs (‘=>’ | ‘?=>’) Type
?=>denotes a context function type.
Context functions are written using
?=>as the “arrow” sign. They are applied to synthesized arguments, in the same way methods with context parameters are applied. For instance:
given ec: ExecutionContext = ... def f(x: Int): ExecutionContext ?=> Int = ...
f(2)(using ec) // explicit argument f(2) // argument is inferred
So, if you think of
A => Bas being analogous to
def foo(a: A): B
Then you should think of
A ?=> Bas being analogous to
def foo(using a: A): B
It's just like a regular function except that the argument is taken as a context parameter. You can refuse to supply it (and it will be inferred from all of the givens in-scope, similar to
implicitin Scala 2), or you can explicitly supply it using the