Haskell:为什么不允许使用中缀类型构造函数?



在Haskell 98报告中,我发现了这一点:

上面给出了Haskell类型表达式的语法。正如使用数据构造函数构建数据值一样,类型值也是从类型构造函数构建的。与数据构造函数一样,类型构造函数的名称从大写字母开始。与数据构造函数不同,不允许使用Infix类型构造函数(( ->)除外)。

没有理由为什么不允许给出 Infix类型的构造函数。在AGDA等中,Infix型构造函数很普遍。为什么不在haskell?

它不是Haskell标准的一部分,但是正如Jamshidh所说的那样,GHC中仍然有可能。警告是数据构造函数(不是类型的构造函数)必须以结肠开头:

{-# LANGUAGE TypeOperators #-}
data a + b = a :+ b
f :: a + b -> a
f (a :+ b) = a
g :: a + b -> b
g (a :+ b) = b

要完全清楚:Haskell 98和Haskell 2000都允许Infix value构造函数,例如

data Complex r = r :+ r

在这里,值构造函数 (:+)是infix,如 5 :+ 7

您只需要TypeOperators扩展名即可具有类型构造函数是infix。例如,

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

在此类型构造函数(??!)是Infix,如Int ??! Bool中。

相关内容

  • 没有找到相关文章

最新更新