A classification of type-level expressions. In the traditional Haskell notation, ordinary types have kind
*, while a unary type constructor such as Tree has kind * -> *. Applying it to a suitable type argument produces an ordinary type. This distinguishes the type-level application from applying a value with a function type. New to topics? Read the docs here!