У меня есть следующая программа:
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 или стороннего script, который выполняет очистку?
Есть ли способ, по крайней мере, избавиться от case {tick (main:Main, 8)} @ (State# RealWorld) of _ { __DEFAULT ->
?