Haskell: Why aren't infix type constructors allowed?

后端 未结 2 1713
离开以前
离开以前 2020-12-20 14:21

In the Haskell 98 report, I found this:

The syntax for Haskell type expressions is given above. Just as data values are built using data constructors,

相关标签:
2条回答
  • 2020-12-20 14:36

    It's not part of the Haskell standard, but as jamshidh mentions it is still possible in GHC. The caveat is that data constructors (not type constructors) must start with a colon:

    {-# LANGUAGE TypeOperators #-}
    
    data a + b = a :+ b
    
    f :: a + b -> a
    f (a :+ b) = a
    
    g :: a + b -> b
    g (a :+ b) = b
    
    0 讨论(0)
  • 2020-12-20 14:49

    Just to be completely clear: Haskell 98 and Haskell 2000 both allow infix value constructors such as

    data Complex r = r :+ r
    

    Here the value constructor (:+) is infix, as in 5 :+ 7.

    You only need the TypeOperators extension to have type constructors which are infix. For example,

    data x ??! y = Left x | Right y
    

    Here the type constructor (??!) is infix, as in Int ??! Bool.

    0 讨论(0)
提交回复
热议问题