哪些语言(如果有的话)实现等级2参数多态性,为什么不使用ML?

时间:2018-09-04 16:27:40

标签: polymorphism ocaml sml ml parametric-polymorphism

本杰明·皮尔斯(Benjamin C. Pierce)在其书类型和编程语言的第23.8节中写道:

  

系统F的另一个经过充分研究的限制是 rank-2多态性,由Leivant(1983)引入[...]。如果将一种类型绘制为树,则从其根到∀量词的路径都没有经过2个或更多箭头的左侧,则该类型被称为2级。 [...]在等级2系统中,所有类型都被限制为等级2。在某种意义上,该系统可以将类型分配给更多未类型化的lambda项,因此它比前传(ML)片段功能更强大。

     

Kfoury和Tiuryn(1990)证明,系统F的等级2片段的类型重构复杂度与ML相同(即DExptime-complete)。 Kfoury and Wells(1999)给出了第一种适用于等级2系统的正确类型重构算法,并表明无法确定系统F的等级3及更高级别的类型重构。

因此,已知用于等级2多态性的类型推断是可判定的,并且自1999年以来就已经知道一种算法。Haskell支持 <?php // this text was used in 2002 // we want to get this up to date for 2003 $text = "April fools day is 04/01/2002\n"; $text.= "Last christmas was 12/24/2001\n"; // the callback function function next_year($matches) { // as usual: $matches[0] is the complete match // $matches[1] the match for the first subpattern // enclosed in '(...)' and so on return $matches[1].($matches[2]+1); } echo preg_replace_callback( "|(\d{2}/\d{2}/)(\d{4})|", "next_year", $text); ?> 语言扩展,但它启用了等级n多态性。

  1. 哪些语言(如果有)实现了rank-2参数多态性,但没有实现System F?

  2. 由于类型推断是可以确定的,并且没有最坏的复杂性,为什么SML和OCaml都没有将多态性扩展到rank-2?

  3. 为什么我们没有在野生环境中看到并了解更多有关rank-2多态性的信息?

0 个答案:

没有答案