在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
意即:
-
您正在声明名称
run
。 -
这个名字将引用一个types为
a -> b
,
typesa -> b
是一个函数的types,它接受atypesa
值并返回另一个b
typesa
值。
你必须真正了解types才能理解Haskell。 types系统是Haskell最重要的特性之一,它使语言如此expression。
当你有一个很吓人的types检查错误时,你可以(暂时)在(myexpression :: MyType)
包装你的代码的一部分,以明确地向编译器指明你期望我的myexpression
types。 这通常会帮助编译器给你更好的错误信息。