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

npo*_*cop 14 command-line haskell 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
Run Code Online (Sandbox Code Playgroud)

我想从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
Run Code Online (Sandbox Code Playgroud)

我设法得到的最好的是

ghci -ddump-simpl -dsuppress-module-prefixes -dsuppress-uniques foo.hs
Run Code Online (Sandbox Code Playgroud)

但是钢铁需要大量人工移除GHC生成的东西来获得上面的代码.是否有GHC或第三方脚本进行清理的转换?

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

Don*_*art 22

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

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

用法 - 只需替换ghcghc-core:

   ghc-core A.hs  

   ghc-core -fvia-C -optc-O3 A.hs
Run Code Online (Sandbox Code Playgroud)

  • 如果我使用cabal构建我的程序怎么办?我还能以某种方式使用ghc-core吗? (8认同)