多态变量的表示与处理
在编程中,多态类型的处理是一个复杂且关键的问题。下面将深入探讨多态变量的表示、相关问题及解决方法。
多态函数与类型系统
先来看一个多态函数 mult
的示例:
function mult(m: poly<a>((a->a)->(a->a)),
n: poly<b>((b->b)->(b->b)))
: poly<c>(c->c)->(c->c) =
let function g<d>(f: d->d) : d->d =
m<d->d>(n<d>(f))
in g
end
这个函数的形式参数 m
和 n
是显式多态的。但在某些类型推导算法中,仅在函数声明时引入 poly
类型,而不会在形式参数中引入。
对于类似 Poly - Tiger 的类型系统,不存在 Hindley - Milner 风格的类型推导算法。如果要充分利用二阶 lambda 演算的强大功能,就需要完整地写出类型。目前还不清楚 Poly - Tiger 额外的表达能力是否必要,以及它是否能超过隐式类型语言中类型推导带来的便利性。像 ML 和 Haskell 这类使用隐式多态类型的语言,在研究社区中作为通用函数式编程语言取得了很大成功,而显式类型的多态语言尚未达到相同的普及程度。不过,显式类型语言正逐渐成为多态语言中间表示的主流。