It's like writing
fn square(numberToBeSquared : number): number {
return numberToBeSquared * numberToBeSquared;
}
The one letter variable version of the function is perfectly readable. Most generics aren't used in a significantly complicated way. Sure, maybe if you're doing something like Haskell's lenses, then you should use descriptive names might be better, but how often are you writing type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
and is type Lens source dest gettable settable =
forall structure. Functor structure =>
(gettable -> structure settable)
-> source
-> structure dest
really any easier to read?