Haskell tuple constructor (GHC) y la separación entre un lenguaje y su implementación

Haskell me voló la cabeza una vez más cuando me di cuenta de que

(x,y)

Es solo azúcar sintáctico para

(,) x y

Naturalmente, quería extender esto a tuplas más grandes. Per

(,) x ((,) y z)

Me di

(x,(y,z))

Lo que no era lo que estaba buscando. Por capricho, probé

(,,) x y z

Y funcionó, dando exactamente lo que quería:

(x,y,z)

Esto planteó la pregunta: ¿hasta dónde puede llevarlo? Para mi sorpresa, no parecía haber límite. Todos los siguientes son operadores válidos:

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

Este comportamiento es sorprendente y me lleva a mi pregunta real: ¿es algo que se pueda emular en mis propias funciones? ¿O es solo una característica específica del GHC del operador de tuplas? Estoy pensando que es lo último, ya que he leído la especificación haskell98 e iirc dice que las implementaciones solo tienen que definir el operador de tupla para hasta 15 elementos. Mientras que GHC se ha vuelto loco y te permite hacerlo hasta límites arbitrarios.

Entonces, ¿sería posible definir esta familia de operadores / funciones desde la propia implementación de haskell, utilizando nada más que el sistema de tipos y las características del lenguaje existente (declaraciones, firmas de tipos, definiciones de funciones, etc.)? Y si es así, ¿cómo? ¿O es imposible y tiene que buscar en el compilador para encontrar el marco de apoyo para esta colección de funciones?

Esto lleva a una pregunta aún más general: cuánto de Haskell es compatible con el propio Haskell, a través de definiciones de tipo y función, declaraciones, etc. y cuánto soporta el compilador / implementación? (Soy consciente de que GHC fue escrito en Haskell, eso no responde la pregunta)

Es decir, si tuviera que abandonar las bibliotecas estándar (incluido el preludio) y hacer todo desde cero en Haskell sin formato; ¿Sería posible construir una implementación completa que tenga todas las características de GHC, utilizando solo ese conjunto mínimo de características? ¿Cuáles son las características mínimas del lenguaje que necesita para construir una implementación de haskell usando Haskell? ¿Sería capaz de abandonar el preludio y luegocompletament reconstruirloa man desde dentro de GHC? Si abandonas el preludio y nunca importas nada, ¿con qué te queda trabajar?

Puede parecer que estoy haciendo un millón de preguntas, pero en realidad todas intentan hacer lo mismo con una redacción diferente. Dale tu mejor tiro SO!

Respuestas a la pregunta(1)

Su respuesta a la pregunta