[Haskell-beginners] forall confusion

Isaac Dupree ml at isaac.cedarswampstudios.org
Sat May 29 16:30:25 EDT 2010

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 

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?)


More information about the Beginners mailing list