问题描述
|
即使没有类型声明,Haskell代码又如何工作?
解决方法
注意:我假设您的意思是类型签名,因为如果删除诸如
type Foo = Bar
或data X = Y
之类的类型定义,该代码将不再起作用(假设实际上是使用定义的类型)。
Haskell代码可以在没有类型签名的情况下工作,因为如果您未指定签名,则变量/函数的类型仅由编译器推断出来。用于进行此推断的算法是Hindley-Milner类型推断算法的一种变体。
, 因为通常可以从上下文中推断出类型。例如,函数tail
的类型为ѭ3say,表示我们从一个列表转到另一个相同类型的列表。当您向该函数传递pass4ѭ时,就会知道另一个String
是结果,因此实际上并不需要明确地说明这一点。因此,(tail \"hello\")
的类型被称为String(或[Char]
,这实际上是相同的)。