I asked a similar question just the another day and the answer was 'it just doesn't work like that'. Essentially the concrete type info is stripped away as soon as its passed into a generic function.