Function :(双冒号)代表什么?

Function :(双冒号)代表什么?,function,haskell,syntax,types,Function,Haskell,Syntax,Types,我到处都能看到并使用:符号,但仍然不知道在Haskell中编程时:符号的含义,例如 run :: Int -> Int -> Int -- ?? :(双冒号)在Haskell中代表什么?你可以用谷歌搜索Haskell的“双冒号”或类似的东西;不幸的是,用谷歌搜索语法有点困难,但在这种情况下,你可以命名它 在Haskell中,如果没有它,您的程序通常会运行良好(尽管您希望使用它来磨练您定义的任何函数的规范,这是一个很好的实践) 这个想法是,你可以在任何地方插入一个:……/代码>(甚

我到处都能看到并使用
符号,但仍然不知道在Haskell中编程时
符号的含义,例如

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

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

你可以用谷歌搜索
Haskell的“双冒号”
或类似的东西;不幸的是,用谷歌搜索语法有点困难,但在这种情况下,你可以命名它

在Haskell中,如果没有它,您的程序通常会运行良好(尽管您希望使用它来磨练您定义的任何函数的规范,这是一个很好的实践)

这个想法是,你可以在任何地方插入一个<代码>:……/代码>(甚至在表达式的中间),说:“顺便说一下,Compiler先生,这个表达式应该是类型<代码>……/代码>。如果可以证明事实并非如此,编译器将抛出一个错误

我认为您还可以使用它将函数“强制转换”到您想要的版本;e、 g.如果一个函数是“多态的”(有一个通用类型签名),并且您实际上想要一个
整数
,那么您可以对结果值执行
::整数
;不过我有点生疏了。

你应该读:

foo :: a 
因为“名称
foo
a
类型的值”。当你写作时:

run :: a -> b 
这意味着:

  • 您正在声明名称
    run

  • 此名称将引用类型为
    a->b
    的值

  • 类型
    a->b
    是一种函数类型,它接受类型
    a
    的值并返回类型
    b
    的另一个值


    您必须真正了解类型才能理解Haskell。类型系统是Haskell最重要的特征之一,也是它使语言如此富有表现力的原因

    当您遇到一个看起来很可怕的类型检查错误时,您可以(暂时)将部分代码包装到
    (myexpression::MyType)
    中,以明确地向编译器说明您希望使用的
    myexpression
    类型。这通常会帮助编译器向您提供更好的错误消息。

    这意味着有类型,所以运行时有类型Int->Int->Int。您怎么会认为您可以在不了解基本语言概念、符号和概念的情况下阅读Haskell程序?有时候阅读语言参考文献是个好主意,Haskell有一个非常好的参考文献。谢谢@Ingo我在哪里可以找到参考文献?你的出发点总是Haskell.org。哈斯凯尔2010年的报告在这里:-优秀的书(也是有趣的)你也有更复杂的多态性案例,你不想描述一个特定的类型,一种类型;指定类型即使在普通的多态性中也能起作用。这正是让我来到这里的搜索词……这个符号从何而来?它是以数学为基础的吗?这个(::)在语言中作为一个实际的运算符存在吗?因为当我使用GHC时,我不能做
    :t(::)
    :k(::)
    。此外,它对于Data.Typeable似乎很有用,您可以尝试将一种类型转换为另一种类型。