-
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 ')
Скобки обязательны.