类型定义不是Haskell必须的吗?

时间:2011-05-27 15:10:38

标签: haskell type-inference

即使没有Type声明,Haskell代码如何工作?

2 个答案:

答案 0 :(得分:4)

注意:我假设你的意思是类型签名,因为如果删除类型定义,如type Foo = Bardata X = Y,代码将不再起作用(假设当然实际使用了定义的类型)

Haskell代码在没有类型签名的情况下工作,因为如果您没有指定签名,则编译器只会简单地推断变量/函数的类型。用于进行推理的算法是Hindley-Milner type inference algorithm的变体。

答案 1 :(得分:4)

因为很常见,类型可以是上下文中的inferred。例如,函数tail的类型为[a] -> [a],表示我们从列表转到另一个相同类型的 。当您将String传递给该函数时,已知另一个String是结果,因此实际上并不需要明确说明。因此,(tail "hello")的类型已知为String(或[Char],它实际上是相同的。)