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? Если вы откажетесь от прелюдии и никогда ничего не импортируете, с чем вам останется работать?
Может показаться, что я задаю миллион вопросов, но на самом деле все они пытаются задать одно и то же, но по-разному. Дайте ему лучший шанс!