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