Spec-Zone.ru › Haskell 9

6.4.4. Операторы типов

TypeOperators
Подразумевает:

ExplicitNamespaces

С:

6.8.1

Статус:

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

Позволяет использовать и определять типы с именами операторов.

Язык TypeOperators позволяет использовать инфиксные операторы в типах.

  • Символы операторов являются конструирующими элементами, а не типами переменных (как в терминах).
  • Символы операторов в типах могут быть написаны инфиксным способом, как в определениях, так и в использовании. Например:

    data a + b = Plus a b
    type Foo = Int + Bool
    
  • Альфа-числовые конструкторы типов теперь могут быть записаны инфиксным способом, используя синтаксис с обратной кавычкой:

    x :: Int `Either` Bool
    x = Left 5
    
  • Теперь существует потенциальная неоднозначность в списках импорта и экспорта; например, если вы пишете import M( (+) ) , подразумевается ли это функцию (+) или конструктор типа (+)? По умолчанию это первое, но с ExplicitNamespaces (что подразумевается TypeOperators) GHC позволяет указать последнее, добавив перед ним ключевое слово type, таким образом:

    import M( type (+) )
    

    См. Явные пространства имен в импорте/экспорте.

  • Фиксированность оператора типа может быть установлена с помощью обычных объявлений фиксированности, но, как и в Инфиксные конструкторы типов, классы и переменные типов, функция и конструктор типа используют одну и ту же фиксированность.
  • Теперь существует потенциальная неоднозначность в традиционном синтаксисе объявлений конструкторов данных. Например:

    type a :+: b = Either a b
    data X = Int :+: Bool :+: Char
    

    Этот код хочет объявить как уровень типа :+: , так и уровень термина :+: (что, как правило, разрешено). Но мы не можем сказать, как скобки скобки объявления конструктора данных в X: в любом случае это имеет смысл. Мы можем представить, что объявление фиксированности могло бы нам помочь, но это неудобно применять объявление фиксированности к самому определению нового конструктора данных. Вместо объявления деликатных правил по этому вопросу, GHC просто отклоняет, если верхний уровень объявления конструктора данных в традиционном синтаксисе использует два оператора без скобок.

© 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/type_operators.html

Spec-Zone.ru

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