The first is the existential type, and the second is the ordinary type. Actually the first syntax means this:
def foo(x:X[t] forSome { type t }){}
This means that x is of type X[t] , where t can be any unspecified type t .
Intuitively, X[_] means that a parameter of type x does not matter, while X[Any] says that it should be Any .
source share