如何以人类可读的形式转储GHC简化器输出?

时间:2012-05-21 22:47:36

标签: haskell command-line ghc

我有以下程序:

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

我想从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

我设法得到的最好的是

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

但钢铁需要大量手动删除GHC生成的东西才能获得上面的代码。是否有GHC或第三方脚本进行清理的转换?

至少有办法摆脱case {tick (main:Main, 8)} @ (State# RealWorld) of _ { __DEFAULT ->吗?

1 个答案:

答案 0 :(得分:20)

你很幸运!这项工作有一个工具:ghc-core

ghc-core使用命令行包装器包装ghc,该命令行包装器以人类可读,色彩的方式在寻呼机中显示GHC优化的核心和汇编输出。

用法 - 只需将ghc替换为ghc-core

   ghc-core A.hs  

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