Spec-Zone.ru › Haskell 9

6.4.3. Инфиксные конструкторы типов, классы и переменные типов

GHC позволяет конструкторам типов, классам и переменным типов быть операторами и записываться инфиксным способом, очень похожим на выражения. Более конкретно:

  • Конструктор типа или класс может быть любым нерезервированным оператором. Символы, используемые в типах, всегда похожи на идентификаторы с заглавной буквы; они никогда не являются переменными. Обратите внимание, что это отличается от лексической синтаксической конструкции конструкторов данных, которые обязаны начинаться с :.
  • Декларации типов данных и синонимов типов могут быть записаны инфиксным способом, в скобках, если нужно указать дополнительные аргументы. Например,

    data a :*: b = Foo a b
    type a :+: b = Either a b
    class a :=: b where ...
    
    data (a :**: b) x = Baz a b x
    type (a :++: b) y = Either (a,b) y
    
  • Типы и ограничения классов могут быть записаны инфиксным способом. Например,

    x :: Int :*: Bool
    f :: (a :=: b) => a -> b
    
  • Обратные кавычки работают так же, как и для выражений, как для конструкторов типов, так и для переменных типов; например, Int `Either` Bool, или Int `a` Bool. Аналогично, скобки работают так же; например, (:*:) Int Bool.
  • Фиксированность может быть объявлена для конструкторов типов или классов, точно так же, как и для конструкторов данных. Однако невозможно отличить их в объявлении фиксированности; объявление фиксированности задает фиксированность для конструктора данных и соответствующего конструктора типов. Например:

    infixl 7 T, :*:
    

    устанавливает фиксированность для обоих конструкторов типов T и конструктора данных T, и аналогично для :*:.

  • Функциональная стрелка -> является infixr с фиксированностью -1.

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

Spec-Zone.ru

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