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.12.1/docs/users_guide/exts/kind_signatures.html

Spec-Zone.ru

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