【问题标题】:What is formally the name of SML's type system?SML 的类型系统的正式名称是什么?
【发布时间】:2014-09-17 13:12:06
【问题描述】:

到目前为止,我一直认为 SML 是简单类型 lambda 演算的便捷实现。学习什么是简单类型的 lambda 演算,我了解到它不能对递归函数进行类型检查。

我了解到存在简单类型的 lambda 演算的泛化,命名为 SystemF。SystemF 是多态的,具有函数返回类型,这可能会以某种方式考虑 SML 的函子,但是 SystemF(根据我已阅读),无法对无限递归进行类型检查,而这可以通过 SML 轻松实现:

fun r x: int = (r x): int   (* Type‑checks *)
val y = r 0                 (* Infinite loop *)

如果 SML 的类型系统既不是简单类型也不是 SystemF,那么它是什么(正式)?还是我错了,两者兼而有之?

【问题讨论】:

标签: types computer-science sml


【解决方案1】:

我相信这是一个Hindley-Milner 类型系统。

【讨论】:

  • 似乎很匹配,至少由以下来源证实:Lambda calculus。它说“SML 中使用的类型系统被称为 Hindley Milner 类型系统”。这个也是:Introduction[TeX]。它说:“包括 Haskell 98 和 SML 在内的许多类型化函数式编程语言都基于 Hindley-Milner 类型系统[...]”。
  • 可能是一个扩展。这个:Some advanced languages,说:“与标准 ML 和 OCaml 一样,Haskell 使用了 Hindley-Milner 风格的类型推断[...]的扩展”。它说的是扩展,它说的是类型推断而不是类型系统。 (仍在根据您的提示进行调查)。
  • 根据Haskell/PolymorphismHindley Milner 类型系统(和类型推断),是 SystemF 的一个限制,前者受到青睐,因为完整 SystemF 的类型推断是不可确定的(类型不能是隐式的,需要显式的,使用 SystemF)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 2010-10-26
  • 2012-03-05
  • 2016-08-16
  • 1970-01-01
  • 2010-09-16
  • 2012-11-24
相关资源
最近更新 更多