Какие языки, если таковые имеются, реализуют параметрический полиморфизм ранга 2 и почему не ML? - PullRequest
0 голосов
/ 04 сентября 2018

В разделе 23.8 своей книги Типы и языки программирования Бенджамин С. Пирс пишет следующее:

Другое хорошо изученное ограничение Системы F - полиморфизм ранга 2 , введенный Leivant (1983) [...]. Тип называется рангом 2, если путь от его корня до ∀ квантификатора не проходит слева от 2 или более стрелок, когда тип рисуется в виде дерева. [...] В системе ранга 2 все типы ограничены рангом 2. Эта система немного более мощная, чем фрагмент prenex (ML), в том смысле, что она может присваивать типы более нетипизированным лямбда-терминам .

Kfoury и Tiuryn ​​(1990) доказали, что сложность восстановления типа для фрагмента ранга 2 системы F идентична сложности ML (т.е. DExptime-complete). Kfoury and Wells (1999) дали первый правильный алгоритм восстановления типа для системы ранга 2 и показали, что восстановление типа для рангов 3 и выше системы F неразрешимо.

Таким образом, вывод типа для полиморфизма ранга 2 известен как разрешимый, и алгоритм известен с 1999 года. Haskell поддерживает расширение языка RankNTypes, но он допускает полиморфизм ранга n.

  1. Какие языки, если таковые имеются, реализуют параметрический полиморфизм ранга 2, но не System F?

  2. Поскольку вывод типа является разрешимым и не имеет худшей сложности, почему ни SML, ни OCaml не расширили полиморфизм до ранга-2?

  3. Почему мы не видим и не читаем больше о полиморфизме ранга 2 в дикой природе?

...