Первая ссылка дает мне 404.

лл снова взорвал мой разум, когда я понял, что

(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; Можно ли построить полную реализацию, которая имеет все функции GHC, используя только этот минимальный набор функций? Каков минимальный набор языковых возможностей, которые вам нужны для создания реализации на Haskell с использованием Haskell? Смогу ли я отказаться от прелюдии, а затемполностью восстановить еговручную изнутри GHC? Если вы откажетесь от прелюдии и никогда ничего не импортируете, с чем вам еще предстоит работать?

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

Ответы на вопрос(1)

Ваш ответ на вопрос