Spec-Zone.ru › Haskell 9

6.11.4. Квантификация с явно указанными видами

KindSignatures
Подразумевается:

TypeFamilies, PolyKinds

Начиная с версии:

6.8.1

Статус:

Включено в GHC2024, GHC2021

Разрешает явно указывать сигнатуры видов для переменных типов.

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 ')

Круглые скобки обязательны.

© 2002–2007 The University Court of the University of Glasgow. All rights reserved.
Licensed under the Glasgow Haskell Compiler License.
https://downloads.haskell.org/~ghc/9.14.1/docs/users_guide/exts/kind_signatures.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API