类型声明haskell和haskell类语言之间的语法差异

Xdm*_*nsy 3 syntax haskell

在Haskell中,使用双冒号键入声明,即(::),类似not :: Bool -> Bool.

但是在许多语言中,其语法类似于Haskell,例如elm,agda,它们使用单​​个冒号(:)来声明类型.喜欢not : Bool -> Bool.

为什么这些语言放弃了haskell样式类型声明语法.

  • 是(:)比(::)更好地声明一个类型?
  • 或者是(::)更适合其他用途?
  • 或者只是因为(:)是一个小于(::)的char?

Ale*_*lec 12

IIRC Haskell使用的选择::是一个(不幸的)历史事故.Haskell主要基于Miranda,也::用于1型.米兰达的作者真的希望cons运算符是:因为他们认为它将无处不在地使用,所以键入运算符必须被委托给::.

它确实没有被证明是一个好主意,因为否则所有的文献(甚至是谈论Haskell的文献)都会使用:.作为最近的纸张,双冒号用于所有样本(Haskell)代码,但数学判断(如第10页)都遵循传统的单冒号.


1我想我记得在某个地方听过(编辑:它就在这里,但是我懒得听完整个事情才能得到合适的时间),当时许多FP研究人员只想定义米兰达很明显,研究论文谈论懒惰的功能纯语言可以有一个共同的语言来谈论他们的想法.米兰达的设计师并不想要这个,但是如果用另一种与米兰达非常相似的语言(为了双方的利益,提供这两种语言仍然可以区分的话)说他们会好的. .这是Haskell委员会的起点.

  • 我不会称之为_that_不幸.反转它们可能会更好,但是世界末日的haskell符号与普通的数学符号略有不同(在许多其他地方也是如此). (3认同)

Sib*_*ibi 9

我听说SPJ在某个地方说,在:和之间做出选择是一个有争议的问题::.他和约翰休斯终于安定下来了::.来自哈斯克尔的历史:与班级纸张一起懒惰:

我们从Miranda采用了这样的约定:数据构造函数是大写的,而变量不是,并且为中缀构造函数添加了类似的约定,在Haskell中必须以冒号开头.选择后一种惯例是为了与我们在单个冒号中使用(从SASL,KRC和Miranda采用)的一致性:对于列表"cons"运算符.(顺便说一句,选择":"表示缺点,而"::"表示类型签名是一个激烈争议的问题(ML则相反),至今仍然存在争议.)