Каковы основные теоретические трудности с добавлением модулей ML-стиля в Haskell?
Хорошо известно, что стили класса стиля Haskell и модули ML-стиля предлагают различные механизмы для указания интерфейсов. Они (возможно) эквивалентны по силе, но на практике у каждого есть свои преимущества и недостатки.
Поскольку я немного инклюзив, когда речь идет о языковых функциях, мой вопрос таков: каковы основные теоретические трудности с добавлением модулей ML-стиля в Haskell? Меня интересуют ответы в следующих строках:
-
Какие существующие системные функции типа плохо взаимодействуют с модулями ML-стиля? (Примером плохого взаимодействия является GADT и функциональные зависимости, даже если фонды являются технически эквивалентными связанным типам!)
-
Какие вещи нужно оставить в конце компилятора для компиляции модулей стиля ML?
-
Как модули ML-стиля взаимодействуют с выводами типа?
Связанное чтение:
Ответы
Ответ 1
Основное место для сравнения -
-
Модули ML и классы типа Haskell: конструктивное сравнение. Стефан Вер и Мануэль М.Т. Чакраварти. В материалах шестого симпозиума ASIAN по языкам и системам программирования - APLAS 2008, Springer-Verlag, LNCS, 2008.
-
Модульные типы классов. Дерек Дрейер, Роберт Харпер и Мануэль М. Т. Чакраварти. В трудах 34-го ежегодного симпозиума ACM SIGPLAN - SIGACT по принципам языков программирования, ACM Press, 2007.
-
Модули первого класса для Haskell, Марк Шилдс и Саймон Пейтон Джонс. Представлено на девятой Международной конференции по основам объектно-ориентированных языков (FOOL 9), Портленд, Орегон. 20 страниц. Октябрь 2001 г.
На самом деле я не знаю каких-либо теоретических вопросов - по крайней мере, конкретные предложения были сделаны (и реализованы в прототипах) - в материалах Shields и PJ есть много деталей. Однако нагрузка на внедрение является нетривиальной.
Ответ 2
Я не думаю, что есть большие теоретические проблемы. Вам нужно будет принять решение об аппликативных функторах или нет. Аппликация, вероятно, больше в стиле Haskell.
Но я думаю, что любая попытка добавления модулей стиля ML в Haskell будет гротескной, поскольку перекрытие между модулями и классами; будет два способа сделать много вещей.
Ответ 3
Simon PJ утверждает, что модули стиля ML имеют низкое соотношение мощности и стоимости, которые трудно реализовать. См. SPJ слайды из POPL 2003 (ближе к концу). Он также требует, чтобы дизайн, который имеет лучшую мощность/стоимость, но я не знаю о таком предложении.