2. On the subject of generics the scope of an inner type does not extend to the generic type, e.g.:
class Example[T <: Inner] {
class Inner {}
}
Is illegal because Inner is not in scope when T is declared, but the equivalent is allowed for abstract types, e.g. the currency example in the book.
3. It is strange to introduce abstract types in the book without discussing the differences between abstract and generic types and giving examples of when one technique would be preferred to the next.
> 3. It is strange to introduce abstract types in the book > without discussing the differences between abstract and > generic types and giving examples of when one technique > would be preferred to the next.
Agree very much with this point - in fact, I was on the verge of posting exactly the same alternative example using a type parameter. Whilst the discussion on path-dependent types earlier in the chapter hints at at least one difference between type variables and parameters (i.e. you can reference type variables by e.g. the expression "Europe.Currency" with value "Euro"), I think it would certainly be beneficial to reiterate that.