¿Qué optimizaciones puede esperarse que GHC realice de manera confiable?

GHC tiene muchas optimizaciones que puede realizar, pero no sé qué son todas, ni qué tan probable es que se realicen y bajo qué circunstancias.

Mi pregunta es: ¿qué transformaciones puedo esperar que se apliquen cada vez, o casi? Si veo un fragmento de código que se ejecutará (evaluará) con frecuencia y mi primer pensamiento es "hmm, tal vez debería optimizarlo", en los casos en los que debería ser mi segundo pensamiento, "ni siquiera lo piense, GHC consiguió esto "?

Estaba leyendo el periódicoStream Fusion: de las listas a las secuencias a nada en absoluto, y la técnica que utilizaron para reescribir el procesamiento de listas en una forma diferente que las optimizaciones normales de GHC luego optimizarían de manera confiable en bucles simples fue novedosa para mí. ¿Cómo puedo saber cuándo mis propios programas son elegibles para ese tipo de optimización?

Hayalguna información en el manual de GHC, pero solo va una parte del camino para responder la pregunta.

EDIT: estoy empezando una recompensa. Lo que me gustaría es una lista de transformaciones de nivel inferior, como lambda / let / case-flotante, la especialización de argumentos de tipo / constructor / función, el análisis de la rigidez y el desempaquetado, el trabajador / envoltorio, y cualquier otra cosa importante que haga GHC que no haya hecho. , junto con explicaciones y ejemplos de código de entrada y salida, e idealmente ilustraciones de situaciones en las que el efecto total es más que la suma de sus partes. E idealmente alguna mención de cuando las transformaciones.no lo hará ocurrir. No espero que las explicaciones de cada transformación sean tan extensas, un par de oraciones y ejemplos de código en línea de una línea podrían ser suficientes (o un enlace, si no es para veinte páginas de un artículo científico), siempre que el panorama general sea claro al final de ello. Quiero poder ver un fragmento de código y poder hacer una buena conjetura acerca de si se compilará en un circuito cerrado, o por qué no, o lo que tendría que cambiar para hacerlo. (No me interesa tanto aquí los grandes marcos de optimización como la fusión de flujos (acabo de leer un artículo sobre eso); más en el tipo de conocimiento que las personas queescribir estos marcos tienen)

Respuestas a la pregunta(3)

Su respuesta a la pregunta