Thats a bit farther down the rabbit hole than the concern in question, though certainly related.
 
An example of what you could write with polymorphic kinds, inventing a notation for polymorphic kind variables using 'x to denote a polymorphic kind x, which could subtitute in for a kind k = * | ** | k -> k | ...
 
type Id (f :: 'k) = f
type Const (a :: 'a) (b :: 'b) = a
 
data True
data False
 
type family If c (x :: 'k) (y :: 'k) :: 'k
type instance If True x y = x
type instance If False x y = y
 
then you could safely apply Id and If types of different kinds.
 
class Container x where
    type Elem x :: *
    type SearchOffersMultipleResults x :: *
    search :: x -> SearchResult x
 
type SearchResult x =  (If (SearchOffersMultipleResults x) [] Maybe) (Elem x)
 
instance Container (SomeContainer a) where
    type Elem (SomeContainer a) = a
    type SearchOffersMultipleResults (SomeContainer a) = True
 
I suppose once down this slippery slope you might consider classes that are parameterized on types with polymorphic kinds as well, but I definitely wouldn't start there. ;)
 
-Edward
 
On Mon, Mar 30, 2009 at 2:54 PM, John Van Enk <vanenkj@gmail.com> wrote:
I suppose having a good description of what I'd like to do might help: I'd like to be able to make an N-Tuple an instance of a type class.
 
class Foo a where
    ....
 
instance Foo (,) where
    ....
 
instance Foo (,,) where
    ....
The different kindedness of (,) and (,,) prevent this from working.
 
/jve

 
On Mon, Mar 30, 2009 at 2:00 PM, Martijn van Steenbergen <martijn@van.steenbergen.nl> wrote:
John Van Enk wrote:
 > Haskell not having 'polymorphic kinds'.
 Is there a good description of why Haskell doesn't have polymorphic kinds?

IANA expert but polymorphic kinds belong to a set of reasonably new influences (e.g. from dependently typed programming languages and generic programming) and they haven't been 1) polished enough to be a widely accepted standard or 2) simply haven't been implemented yet (low priority, etc).

Besides that, I sometimes see polymorphic kinds in GHC error messages, so I suspect that at least parts of GHC already support them.

Martijn.




--
/jve