mac*_*ian 44 syntax haskell types function
我看到并使用了各处的::符号,但仍然不知道::符号在Haskell中编程时的含义,例如
run :: Int -> Int -> Int
-- ??
Run Code Online (Sandbox Code Playgroud)
什么::(双冒号)代表Haskell?
nin*_*cko 40
你可以google haskell "double colon"或类似的东西; 很遗憾谷歌的语法有点困难,但在这种情况下你可以命名.
在Haskell中,如果没有它,你的程序通常会正常运行(尽管你会想用它来磨练你定义的任何函数的规范,这是一个好习惯).
这个想法是你可以在:: ...任何地方插入(甚至在表达式的中间)来说"按照编译先生的方式,这个表达式应该是类型...".如果可以证明这可能不是这种情况,则编译器将抛出错误.
我想你也可以用它来"转换"你想要的版本的功能; 例如,如果一个函数是"多态的"(具有一般类型签名)并且您实际上想要,比如说Integer,那么您可以:: Integer对结果值执行操作; 我虽然有点生疏.
Raf*_*ini 14
你应该阅读:
foo :: a
Run Code Online (Sandbox Code Playgroud)
作为"名称foo是类型的值a".当你写:
run :: a -> b
Run Code Online (Sandbox Code Playgroud)
这意味着:
你是在宣布这个名字run.
此名称将引用具有类型的值a -> b,
类型a -> b是一个函数的类型,它接受一个类型的值a并返回另一个类型的值b.
你必须真正了解类型才能理解Haskell.类型系统是Haskell最重要的特性之一,它是使语言如此富有表现力的原因.
当你有一个看起来很可怕的类型检查错误时,你可以(暂时)包装部分代码,(myexpression :: MyType)以明确地向编译器说明你期望myexpression拥有的类型.这通常有助于编译器为您提供更好的错误消息.
| 归档时间: |
|
| 查看次数: |
8438 次 |
| 最近记录: |