14

次のプログラムがあります。

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 ->ますか?

4

1 に答える 1

22

あなたは運がいいです!この仕事のためのツールがあります: ghc-core

ghc-core は、GHC の最適化されたコアとアセンブリの出力をページャーで人間が読める色付きの方法で表示するコマンド ライン ラッパーで ghc をラップします。

ghc使用法 -に置き換えるだけghc-coreです:

   ghc-core A.hs  

   ghc-core -fvia-C -optc-O3 A.hs
于 2012-05-21T23:08:59.687 に答える