types - system-f中有哪些类型和/或术语无法用欣德利·米尔纳(Hindley Milner)表达

标签 types type-inference lambda-calculus hindley-milner

我记得在某处读过Hindley Milner是对system-f的限制。如果是这样,有人可以为我提供一些可以在system-f中键入但不能在HM中键入的术语。

最佳答案

任何涉及较高等级(即“一流”)的多态性。例如:

lambda (f : forall A. A -> A). (f Int 1, f String "hello")

此函数的类型为(forall A. A -> A) -> Int * String,在HM中无法表达,在HM中,所有多态类型方案都必须采用“prenex”形式(即,量词只能出现在外部,从不嵌套)。

关于types - system-f中有哪些类型和/或术语无法用欣德利·米尔纳(Hindley Milner)表达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9515956/

相关文章:

typescript - 尝试实现通用规范和访问者模式时,类型不满足约束并错误地扩展接口(interface)

objective-c - 我可以在 int 和 NSNumber 之间实现多重调度吗?

java - 使用方法引用和原始类型进行类型推断

f# - 如何在 F# 中实现定点运算符(Y 组合器)?

arrays - 迭代结构类型的数组

ruby-on-rails-3 - 将列类型从字符变化更改为不带时区的时间戳

TypeScript:当类型推断正确检测到类型时显式设置类型是不好的做法吗?

scala - 继承和自递归类型推断

python - 如何在 Python 或函数式编程语言中创建函数扩展/函数接口(interface)/函数类?

haskell - 纯 Haskell Lambda 微积分中列表的仿函数性