GHC Core es un lenguaje intermedio (IR) de propósito general, fuertemente tipado, funcional y de orden superior, que sirve como la representación interna principal del código Haskell dentro del Glasgow Haskell Compiler (GHC). Es un subconjunto simplificado de Haskell, despojado de azúcar sintáctico y características de alto nivel, y se basa en el cálculo lambda extendido con tipos explícitos, let-polimorfismo y construcciones para efectos y mutabilidad controlada. Su diseño busca ser lo suficientemente expresivo para representar todas las características de Haskell, pero lo suficientemente simple para facilitar optimizaciones y transformaciones de código. Cada programa Haskell se traduce a GHC Core antes de que se apliquen las fases de optimización y la generación de código máquina.
La implementación más prominente de GHC Core se encuentra, como su nombre indica, dentro del Glasgow Haskell Compiler (GHC), el compilador de facto para el lenguaje Haskell. GHC Core es la etapa central donde se realizan la mayoría de las optimizaciones de alto nivel y específicas del lenguaje, como la inlining de funciones, la eliminación de código muerto, la especialización de tipos y la optimización de fusiones (fusion optimization). Herramientas como el 'Core Lint' de GHC utilizan GHC Core para verificar la validez de las transformaciones. Además, lenguajes como PureScript y Elm, aunque no compilan directamente a GHC Core, comparten principios de diseño similares al usar un IR funcional fuertemente tipado para facilitar optimizaciones y transformaciones antes de la generación de JavaScript.
Para un Arquitecto, entender GHC Core es crucial al diseñar sistemas de alto rendimiento en Haskell o al evaluar la viabilidad de lenguajes funcionales compilados. Permite comprender cómo las abstracciones de alto nivel de Haskell se traducen a una representación más cercana al hardware, revelando el impacto de las decisiones de diseño en el rendimiento y la eficiencia. Un conocimiento de GHC Core ayuda a predecir el comportamiento del compilador, depurar problemas de rendimiento complejos y escribir código que se optimice mejor. Por ejemplo, entender cómo las type classes se desazucaran a funciones de diccionario en GHC Core puede influir en la elección entre type classes y funciones polimórficas explícitas. Además, para arquitectos que consideran construir sus propios DSLs o lenguajes, GHC Core ofrece un modelo robusto y bien estudiado para el diseño de lenguajes intermedios que facilitan optimizaciones potentes y una fuerte garantía de tipos.