-
KindSignatures -
- Подразумевается:
- Начиная с версии:
-
6.8.1
- Статус:
Разрешает явно указывать сигнатуры видов для переменных типов.
Haskell выводит вид каждой переменной типа. Иногда удобно указывать вид явно в качестве документации, проверяемой компилятором, так же как удобно задавать сигнатуру типа для функции. В некоторых случаях это необходимо. Например, в своей статье «Ограниченные типы данных в Haskell» (семинар Haskell Workshop, 1999) Джон Хьюз был вынужден определить тип данных:
data Set cxt a = Set [a]
| Unused (cxt a -> ())
Единственным назначением конструктора Unused было задание правильного вида для переменной типа cxt.
Теперь GHC позволяет вместо этого напрямую указывать вид переменной типа в любом месте, где переменная типа явно связывается. Для этого используется расширение KindSignatures.
Это расширение позволяет использовать сигнатуры видов в следующих местах:
-
объявления
data:data Set (cxt :: Type -> Type) a = Set [a]
-
объявления
newtype:newtype Set (cxt :: Type -> Type) a = Set [a]
-
объявления
type:type T (f :: Type -> Type) = f Int
-
объявления
class:class (Eq a) => C (f :: Type -> Type) a where ...
-
forallв сигнатурах типов:f :: forall (cxt :: Type -> Type). Set cxt Int
Круглые скобки обязательны.
В рамках того же расширения можно также добавлять аннотации вида к типам. Таким образом:
f :: (Int :: Type) -> Int g :: forall a. a -> (a :: Type)
Синтаксис имеет вид
atype ::= '(' ctype '::' kind ')
Круглые скобки обязательны.