
On 05/29/10 11:35, Philip Scott wrote:
Hi all,
I was wondering if someone could give me an intuitive explanation of why in
f :: forall a.(Show a) => a -> String f x = show x
"forall a.(Show a) => a" appears to translate into "Any a, as long as it is an instance of Show"
The function must be type-correctly defined for "any a in Show". (the caller/user "chooses" which type "a" is desired.)
but if I use forall in an type qualifier in an assignment:
myList = [] :: [forall a.(Show a) => a]
Each element of this list must be "any a in Show". (the caller/user "chooses" which type "a" is desired.) In this case, the only way to generate a value that is truly "any a in Show" is "undefined".* *some classes, like Read, might provide another possible value, as in [read "123"] which could be [forall a.(Read a) => a] -- albeit only a few types "a", such as Integer and Double, would actually have non-bottom values in this case, but it's easy to construct less-awful examples. Why were you poring over Existentially Quantified Types? -- you didn't use any existentials above -- did you want to? (or I should ask -- can you tell, yet, whether you wanted to?) -Isaac