2012-05-21 2 views
10

Ich habe das folgende Programm:Wie GHC Simplifier-Ausgabe in menschenlesbarer Form ausgeben?

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 

Ich möchte von GHC, so etwas bekommen:

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 

Das Beste, was ich zu bekommen verwaltet

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

ist, aber es Stahl erforderlich viel manuelle Entfernung von GHC-generierten Sachen, um den obigen Code zu bekommen. Gibt es einen Schalter für GHC oder ein Drittanbieter-Skript, das die Bereinigung durchführt?

Gibt es einen Weg, mindestens case {tick (main:Main, 8)} @ (State# RealWorld) of _ { __DEFAULT -> loszuwerden?

+0

Die 'tick' Anmerkungen von HPC erzeugt werden, so deaktivieren sie sollten sie loswerden, denke ich. –

+0

Ich weiß nicht wie. Ich habe es nicht eingeschaltet - siehe Befehlszeile. – nponeccop

Antwort

17

Sie haben Glück! Es gibt ein Tool für den Job: ghc-core.

ghc-core umschließt ghc mit einem Befehlszeilen-Wrapper, der die optimierte Kern- und Baugruppenausgabe von GHC in einer visuell lesbaren, kolorierten Weise in einem Pager anzeigt.

Verwendung - ersetzen Sie einfach ghc mit ghc-core:

  ghc-core A.hs 

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

(Das heißt, Sie werden es nicht lesbarer als das. Außerdem installieren Sie 'ghc-core' mit' cabal install ghc-core'.) –

+0

Die [screenshot] (http://galois.com/ ~ dons/images/ghc-core.png) Verbindung ist unterbrochen. – pat

+0

Leider kann ich nicht viel dagegen tun. –