【发布时间】:2014-11-20 01:37:42
【问题描述】:
我正在学习 Haskell,并试图掌握 Haskell 类型系统的工作原理,重新确定事物的类型:动态、静态、手动设置、推断?
我懂一点的语言:
C、Java:由程序员手动设置,在编译时验证,如
int i;,强类型(从字符串中减去整数是编译错误)。典型的静态类型系统。Python:由运行时自动推断的类型(动态类型), 强类型(从
str中减去int会引发异常)。Perl、PHP:在运行时自动推断类型(动态类型)、弱类型。
Haskell:类型通常在编译时自动推断(此类型或类型在编译时由程序员显式设置),强类型。
Haskell 的类型系统真的值得描述为“静态”吗?我的意思是自动类型推断不是(经典)静态类型。
【问题讨论】:
-
在文献中,“静态”意味着在编译时已知,所以是的。 “静态,推断”可能是最好的描述(或者也许"Hindley-Milner" 是最好的,这是静态推断系统的特定风格,与 SML 和 OCaml 以及少数其他语言共享)。
-
从字符串中减去整数不是 C 语言中的编译错误。
-
在我看来,动态类型是无法推断的。类型推断本质上是静态的。在运行时,您可以进行类型检查,但不能进行推理。
标签: haskell type-systems typing dynamic-typing static-typing