2012-05-21 15 views
10

Tengo el siguiente programa:¿Cómo volcar salida del simplificador GHC en forma legible para humanos?

data Peano = Zero | Succ Peano deriving (Show) 

add Zero  b = b 
add (Succ a) b = add a (Succ b) 

mul Zero  b = Zero 
mul (Succ a) b = add b (mul a b) 

four x = let two = Succ (Succ Zero) in mul two two 

Quiero conseguir algo como esto desde GHC:

add = 
    \ ds b -> 
    case ds of 
     Zero -> 
     b 
     Succ a -> 
     add 
      a 
      (Succ b) 

mul = 
    \ ds b -> 
    case ds of 
     Zero -> 
     Zero 
     Succ a -> 
     add 
      b 
      (mul a b) 

four = 
    let 
     two = 
     Succ 
      (Succ Zero) 
    in 
    mul two two 

La mejor he conseguido es

ghci -ddump-simpl -dsuppress-module-prefixes -dsuppress-uniques foo.hs 

pero el acero requerido mucha eliminación manual de material generado por GHC para obtener el código anterior. ¿Hay algún cambio para GHC o un script de terceros que realice la limpieza?

¿Hay una manera al menos para deshacerse de case {tick (main:Main, 8)} @ (State# RealWorld) of _ { __DEFAULT ->?

+0

El 'anotaciones tick' son generados por HPC, por lo que su desactivación debe deshacerse de ellos, creo. –

+0

No sé cómo. No lo encendí, mira la línea de comando. – nponeccop

Respuesta

17

¡Estás de enhorabuena! Hay una herramienta para el trabajo: ghc-core.

ghc-core envuelve ghc con un envoltorio de línea de comandos que muestra el núcleo optimizado y la salida de ensamblaje de GHC de una manera legible y coloreada por humanos, en un buscapersonas.

Uso - basta con sustituir ghc con ghc-core:

  ghc-core A.hs 

    ghc-core -fvia-C -optc-O3 A.hs 
+0

(Dicho esto, no se va a conseguir que sea más fácil de leer que esto. Además, instalar 'GHC-core' con' Cabal instalar GHC-core'.) El –

+0

[pantalla] (http://galois.com/ ~ dons/images/ghc-core.png) el enlace está roto. – pat

+0

Desafortunadamente, no puedo hacer mucho al respecto. –

Cuestiones relacionadas