即使没有Type声明,Haskell代码如何工作?
答案 0 :(得分:4)
注意:我假设你的意思是类型签名,因为如果删除类型定义,如type Foo = Bar
或data X = Y
,代码将不再起作用(假设当然实际使用了定义的类型)
Haskell代码在没有类型签名的情况下工作,因为如果您没有指定签名,则编译器只会简单地推断变量/函数的类型。用于进行推理的算法是Hindley-Milner type inference algorithm的变体。
答案 1 :(得分:4)
因为很常见,类型可以是上下文中的inferred。例如,函数tail
的类型为[a] -> [a]
,表示我们从列表转到另一个相同类型的 。当您将String
传递给该函数时,已知另一个String
是结果,因此实际上并不需要明确说明。因此,(tail "hello")
的类型已知为String(或[Char]
,它实际上是相同的。)