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.14.1/docs/users_guide/exts/infix_tycons.html

Spec-Zone.ru

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