What is the meaning of "?=>" in Scala 3?

Viewed 200

I cannot find explanation of the following syntax rule:

FunType ::= FunTypeArgs (‘=>’ | ‘?=>’) Type
1 Answers

?=> 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 => B as being analogous to

def foo(a: A): B

Then you should think of A ?=> B as 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 implicit in Scala 2), or you can explicitly supply it using the using keyword.

Related