在Haskell中,::(双冒号)代表什么?

我看到和使用::符号无处不在,但仍然不知道什么是符号在Haskell中编程的意思,例如

 run :: Int -> Int -> Int -- ?? 

在Haskell中, :: :(双冒号)代表什么?

你可以谷歌为haskell "double colon"或类似的东西; 不幸的是,google语法有点难,但是在这种情况下,你可以命名它。

在Haskell中,如果没有它,你的程序通常会运行正常(尽pipe你会用它来磨练你定义的任何函数的规范,这是一个好习惯)。

这个想法是,你可以插入一个:: ...任何地方(即使在expression中间)来说:“通过编译器先生,这个expression式应该是... ”。 然后编译器会抛出一个错误,如果可以certificate这可能不是这种情况。

我想你也可以用它来“投”function到你想要的版本; 例如,如果一个函数是“多态的”(有一个普通的types签名),而且实际上你想要一个Integer ,那么你可以对整个值进行:: Integer : 虽然我有点生疏

你应该阅读:

 foo :: a 

作为“名称foo是atypesa值”。 当你写:

 run :: a -> b 

意即:

  1. 您正在声明名称run

  2. 这个名字将引用一个types为a -> b

typesa -> b是一个函数的types,它接受atypesa值并返回另一个btypesa值。

你必须真正了解types才能理解Haskell。 types系统是Haskell最重要的特性之一,它使语言如此expression。

当你有一个很吓人的types检查错误时,你可以(暂时)在(myexpression :: MyType)包装你的代码的一部分,以明确地向编译器指明你期望我的myexpressiontypes。 这通常会帮助编译器给你更好的错误信息。