
The only value that inhabits (forall a. [a]), except bottom, is the empty list []. You can actually experiment this with ghci. shell-prompt$ ghci -XRankNTypes GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Prelude> [] :: (forall a. [a]) [] Prelude> [True] :: (forall a. [a]) <interactive>:7:2: Couldn't match expected type `a1' with actual type `Bool' `a1' is a rigid type variable bound by an expression type signature: [a1] at <interactive>:7:1 In the expression: True In the expression: [True] :: forall a. [a] In an equation for `it': it = [True] :: forall a. [a] Prelude> ['a'] :: (forall a. [a]) <interactive>:8:2: Couldn't match expected type `a1' with actual type `Char' `a1' is a rigid type variable bound by an expression type signature: [a1] at <interactive>:8:1 In the expression: 'a' In the expression: ['a'] :: forall a. [a] In an equation for `it': it = ['a'] :: forall a. [a] Prelude> [\x -> x] :: (forall a. [a]) <interactive>:9:2: Couldn't match expected type `a1' with actual type `t0 -> t0' `a1' is a rigid type variable bound by an expression type signature: [a1] at <interactive>:9:1 The lambda expression `\ x -> x' has one argument, but its type `a1' has none In the expression: \ x -> x In the expression: [\ x -> x] :: forall a. [a] 2014년 06월 15일 12:47, Gábor Lehel 쓴 글:
In other words instances for forall-types, such as:
instance Foo (forall a. [a]) where ...
It feels obvious to me that there *would* be problems with this, but I'm curious about what, exactly, they are.
Could someone familiar with the matter either elaborate on them, or refer me to an existing explanation, a previous discussion, or something of the sort?
I *don't* have any kind of use case in mind, I'm merely seeking a better understanding of the type-system issues involved.
(I attempted Google, but didn't have much success.)
Thanks in advance.