I agree with @julienrf. A given
parameter both demands and provides a given instance, so we need a single keyword to express both. Why given
and not implicit
? The principal reason is that we need to distinguish new from old syntax since the method application rules have changed. implicit
parameters can be passed using plain arguments whereas given
parameters can only be passed using arguments of the form (given E)
. Besides, given
is a better name than implicit precisely because it expresses
both “provide” and “require”. The previous syntax
implicit object ord extends Ord[Int] { ... }
is weird since there is nothing “implcit” about ord
. It’s just as explicit as the next object. The new syntax
given ord: Ord[Int] { ... }
works much better in this regard.