2012-05-21 26 views
10

Tôi đã chương trình sau đây:Làm thế nào để kết xuất đầu ra của bộ khuếch đại GHC ở dạng người có thể đọc được?

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 

Tôi muốn để có được một cái gì đó như thế này từ 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 

Điều tốt nhất tôi quản lý để có được là

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

nhưng nó thép cần thiết rất nhiều việc loại bỏ thủ công các công cụ tạo ra GHC để lấy mã ở trên. Có chuyển đổi cho GHC hoặc tập lệnh của bên thứ ba có thực hiện việc dọn dẹp không?

Có cách nào ít nhất để loại bỏ case {tick (main:Main, 8)} @ (State# RealWorld) of _ { __DEFAULT -> không?

+0

Lệnh 'chú thích tick' được tạo ra bởi HPC, vì vậy việc vô hiệu hóa nó nên để loại bỏ chúng, tôi nghĩ. –

+0

Tôi không biết làm thế nào. Tôi không bật nó lên - xem dòng lệnh. – nponeccop

Trả lời

17

Bạn đang gặp may! Có một công cụ cho công việc: ghc-core.

Ghc-core kết thúc tốt đẹp ghc với trình bao bọc dòng lệnh hiển thị đầu ra và lắp ráp được tối ưu hóa của GHC theo cách được tô màu, có thể đọc được, trong một máy nhắn tin.

Cách sử dụng - chỉ cần thay thế ghc với ghc-core:

  ghc-core A.hs 

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

(Điều đó nói rằng, bạn sẽ không làm cho nó dễ đọc hơn thế này. Ngoài ra, cài đặt 'ghc-core' với 'cabal install ghc-core'.) –

+0

[screenshot] (http://galois.com/ ~ dons/images/ghc-core.png) liên kết bị hỏng. – pat

+0

Thật không may, tôi không thể làm nhiều về điều đó. –

Các vấn đề liên quan