2012-05-21 19 views
10

Aşağıdaki programı var: çelik gerekliGHC basitleştirici çıktısını insan tarafından okunabilir formda nasıl döküm?

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 

Ben başardı iyi

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

ama:

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 

Ben ghc gelen böyle bir şey almak istiyorum Yukarıdaki kodu almak için GHC tarafından oluşturulan malzemelerin çok sayıda manuel olarak kaldırılması. GHC ya da temizlik yapan bir üçüncü parti senaryosu için bir anahtar var mı?

En azından case {tick (main:Main, 8)} @ (State# RealWorld) of _ { __DEFAULT -> kurtulmak için bir yolu var mı?

+0

'tick' ek açıklamalar yüzden onlardan kurtulmak gerekir devre dışı bırakarak, HPC tarafından oluşturulan, sanırım. –

+0

Nasıl olduğunu bilmiyorum. Açmadım - komut satırını gör. – nponeccop

cevap

17

Şanslısınız! İş için bir araç var: ghc-core.

ghc-core, GHC'nin optimize edilmiş çekirdek ve montaj çıktısını insan tarafından okunabilir, renklendirilmiş bir şekilde, bir çağrı cihazında görüntüleyen bir komut satırı sarmalayıcısı ile ghc'yi sarar.

Kullanımı - sadece ghc-core ile ghc değiştirin:

  ghc-core A.hs 

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

(Bu, bundan daha okunabilir bir hale gelmeyeceğini de söylüyorsunuz. Ayrıca, 'ghc-core'' 'cabal install ghc-core' ile kurun.) –

+0

[ekran görüntüsü] (http://galois.com/ ~ dons/images/ghc-core.png) bağlantısı bozuldu. – pat

+0

Maalesef bu konuda fazla bir şey yapamam. –

İlgili konular