I have the following program:
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
I want to get something like this from 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
The best I managed to get is
ghci -ddump-simpl -dsuppress-module-prefixes -dsuppress-uniques foo.hs
but it steel required a lot of manual removal of GHC generated stuff to get the code above. Is there a switch for GHC or a third party script that does the cleanup?
Is there a way at least to get rid of case {tick (main:Main, 8)} @ (State# RealWorld) of _ { __DEFAULT ->
?
You're in luck! There is a tool for the job: ghc-core.
ghc-core wraps ghc with a command line wrapper that displays GHC's optimised core and assembly output in a human readable, colourised manner, in a pager.
Usage - just replace ghc
with ghc-core
:
ghc-core A.hs
ghc-core -fvia-C -optc-O3 A.hs
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With