User:Zzo38/Proposal for additional kinds

From HaskellWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This document is proposal about additional kinds.

New kinds

##      -- New name for (#) kind (although (#) is available for compatibility)
&       -- Kind for classes
+       -- Kind for type-level natural numbers
$       -- Means make up a kind from a Template Haskell code

Kind of classes

Example:

* -> & -- Kind of Eq class.
(* -> *) -> & -- Kind of Monad class.
(* -> &) -> & -- Class of classes.
+ -> * -> & -- Infinite series of classes, selected by a natural number.

Natural number kind

If a type requires a parameter, it can be a + kind, meaning numbers.

There should be some way to specify a type taking natural numbers by defining it for zero and them for a successor, so that it applies for all natural numbers.

It also means a type of kind + -> + -> + can be a type of adding numbers or other stuff like that, too.

A natural number type would be a type with the number of values being that number, for example 4 is Maybe (Maybe (Maybe (Maybe Zero))), and (->) would be the type for a array with a specific number of elements fixed by the type.

See also