Саймон в основном прав, с экстенсиональной точки зрения. Мы достаточно хорошо знаем, какова семантика современных функциональных языков, и они действительно являются относительно небольшими вариациями друг друга - каждый из них представляет несколько разные переводы в монадный метаязык. Даже такой язык, как Scheme (динамически типизированный императивный язык высшего порядка с первоклассным управлением), имеет семантику, довольно близкую к ML и Haskell.
В
Но попасть в категорию, подходящую для интерпретации современных типизированных функциональных языков, становится довольно страшно. По сути, вы в конечном итоге создаете ультраметрически обогащенную категорию отношений частичной эквивалентности над этой областью. (В качестве примера см. Биркедал, Стовринг и Тэмсборг «Семантика реализуемости параметрического полиморфизма, общие ссылки и рекурсивные типы».) Люди, которые предпочитают операционную семантику, знают это как пошаговые индексированные логические отношения. (Например, см. «Независимость представительства в зависимости от государства» Ахмеда, Дрейера и Россберга.) В любом случае используемые методы являются относительно новыми.
a -> b
⟨ ⟩ → Т⟨ Б ⟩⟨ ⟩ → ⟨ б ⟩T( А )⟨ ⟩a
→
Итак, что касается эквациональной теории, поскольку эти языки могут быть описаны переводами в несколько разные подмножества одного и того же языка, вполне справедливо называть их синтаксическими вариациями друг друга.
Разница в ощущениях между ML и Haskell на самом деле проистекает из интенсиональных свойств двух языков - времени выполнения и потребления памяти. ML имеет композиционную модель производительности (т. Е. Затраты времени / пространства программы могут быть вычислены из затрат времени / пространства ее подтерминов), как и настоящий язык вызовов по имени. Actual Haskell реализован с помощью запроса по запросу, своего рода напоминания, и в результате его производительность не является композиционной - сколько времени занимает выражение, связанное с переменной, для оценки зависит от того, использовалось ли оно ранее или нет. Это не смоделировано в семантике, на которую я ссылался выше.
Если вы хотите более серьезно относиться к интенсиональным свойствам, тогда ML и Haskell начинают проявлять более серьезные различия. Вероятно, все еще возможно разработать общий метаязык для них, но интерпретация типов будет отличаться гораздо более систематическим образом, связанным с теоретико-доказательной идеей фокусировки . Хорошее место, чтобы узнать об этом - кандидатская диссертация Ноама Цайлбергера.