The Object type constructor is parameterized by a row of types. In kind notation, Object has kind # * -> *. That is, it takes a row of types to a type. ( value :: Number, values :: [Number] ) denotes a row of types (something of kind # *),...

haskell,dependent-type,data-kinds,type-kinds

In current GHC (7.8 at time of writing), one cannot separate the declaration of a fresh kind from the declaration of its type-level inhabitants.

First off, * is not a wildcard! It's also typically pronounced "star." Bleeding edge note: There is as of Feb. 2015 a proposal to simplify GHC's subkind system (in 7.12 or later). That page contains a good discussion of the GHC 7.8/7.10 story. Looking forward, GHC may drop the distinction...

The default kind for arguments is *; but you can override the default by giving a kind annotation. Like this: type family LowerTriPacked (v :: * -> *) :: * -> * ...

haskell,polymorphism,dependent-type,data-kinds,type-kinds

There is no1 such thing as "types with kinds other than *". Kind * is the kind for types, much like Int is the type for machine-sized numbers; other kinds may contain stuff that resembles types or can be converted to types or is used to index types or whatever...

haskell,higher-kinded-types,type-kinds,polykinds

Polykinded type application is injective from the outside, but certainly not injective from inside Haskell. By "injective from the outside" I mean that whenever there is a Refl with type f a :~: g b, then it must be the case that f is equal to g and a is...

After banging on this problem for a few more days, I have typeclass inheritance of different Kinds that, as far as I can tell, is correct. I was on the right track in my question update. All I needed to do was add an explicit inheritance of Semigroup. I am...