Конструктор кортежей Haskell (GHC) и разделение языка и его реализации

Haskell снова поразил меня, когда я понял, что

(x,y)

- это просто синтаксический сахар для

(,) x y

Естественно, я хотел распространить это на более крупные кортежи. Но

(,) x ((,) y z)

дал мне

(x,(y,z))

Это было не то, что я искал. По прихоти я попробовал

(,,) x y z

И это сработало, дав именно то, что я хотел:

(x,y,z)

Возник вопрос: как далеко вы можете зайти? К моему большому изумлению, не было предела. Все нижеприведенные операторы являются допустимыми:

(,)
(,,)
(,,,)
(,,,,)
--etc
(,,,,,,,,,,,,,,)
(,,,,,,,,,,,,,,,)
--etc
(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)
--etc

Такое поведение удивительно и приводит к моему собственному вопросу: можно ли это что-то эмулировать в моих собственных функциях? Или это просто особенность оператора кортежа, специфичная для GHC? Я думаю, что это последнее, поскольку я прочитал спецификацию haskell98, и в iirc говорится, что реализации должны определять оператор кортежа только для 15 элементов. В то время как GHC сделал все возможное и позволил вам делать это до произвольных пределов.

Итак, можно ли было бы определить это семейство операторов / функций из самой реализации haskell, используя только систему типов и существующий язык особенности (объявления, сигнатуры типов, определения функций и т. д.)? И если да, то как? Или это невозможно, и вам нужно вместо этого заглянуть в компилятор, чтобы найти поддерживающую структуру для этого набора функций?

Это приводит к еще более общему вопросу: какая часть Haskell поддерживается самим Haskell через типы и функции определения, декларации и т. д .; и сколько поддерживается компилятором / реализацией? (Я знаю, что GHC был написан на Haskell, что не отвечает на вопрос)

То есть, если бы вы отказались от стандартных библиотек (включая прелюдию) и делали все с нуля на сыром Haskell; возможно ли построить полную реализацию, обладающую всеми функциями GHC, используя только этот минимальный набор функций? Какой минимальный набор языковых функций вам понадобится для создания реализации haskell с использованием Haskell? Смогу ли я отказаться от прелюдии, а затем полностью перестроить вручную из GHC? Если вы откажетесь от прелюдии и никогда ничего не импортируете, с чем вам останется работать?

Может показаться, что я задаю миллион вопросов, но на самом деле все они пытаются задать одно и то же, но по-разному. Дайте ему лучший шанс!

35
задан Bohemian 17 August 2011 в 00:34
поделиться