格式化 GHC 核心?
Formatting GHC core?
当 运行 GHC 与 -ddump-simpl
时,我得到 .dump-simpl
格式非常难以阅读的文件。
示例片段:
{ (# ipv_aAYC, ipv1_aAYD #) ->
(# ipv_aAYC
`cast` ((GHC.Prim.State#
(Lamdu.Calc.Infer.R:WorldSTInfer[0]
<GHC.Prim.RealWorld>_N ; (Control.Monad.ST.Class.D:R:Worldt[0]
<ReaderT
(InferEnv
(STVar GHC.Prim.RealWorld),
STRef
GHC.Prim.RealWorld
Lamdu.Calc.Infer.QVarGen)>_N
<MaybeT
(GHC.ST.ST
GHC.Prim.RealWorld)>_N ; (Control.Monad.ST.Class.D:R:Worldt[0]
<MaybeT>_N
<GHC.ST.ST
GHC.Prim.RealWorld>_N ; Control.Monad.ST.Class.D:R:WorldST[0]
(Nth:0
(Nth:2
(Nth:3
(Nth:3
(<(InferEnv
(STVar
GHC.Prim.RealWorld),
STRef
GHC.Prim.RealWorld
Lamdu.Calc.Infer.QVarGen)>_R
->_R Sym (GHC.ST.N:ST[0]
<GHC.Prim.RealWorld>_N
<Maybe
(STVar
(World
(STInfer
GHC.Prim.RealWorld))
('Knot
T.Type))>_R) ; Sym (Control.Monad.Trans.Maybe.N:MaybeT[0]
<GHC.ST.ST
GHC.Prim.RealWorld>_R
(Lamdu.Calc.Infer.D:R:UVarSTInfer[0]
(Sym (Control.Monad.ST.Class.D:R:WorldST[0]
<GHC.Prim.RealWorld>_N) ; (Sym (Control.Monad.ST.Class.D:R:Worldt[0]
<MaybeT>_N
<GHC.ST.ST
GHC.Prim.RealWorld>_N) ; (Sym (Control.Monad.ST.Class.D:R:Worldt[0]
<ReaderT
(InferEnv
(STVar
GHC.Prim.RealWorld),
STRef
GHC.Prim.RealWorld
Lamdu.Calc.Infer.QVarGen)>_N
<MaybeT
(GHC.ST.ST
GHC.Prim.RealWorld)>_N) ; Sym (Lamdu.Calc.Infer.R:WorldSTInfer[0]
<GHC.Prim.RealWorld>_N)))) <'Knot
T.Type>_N))) ; (Control.Monad.Trans.Maybe.N:MaybeT[0]
<GHC.ST.ST
GHC.Prim.RealWorld>_R
<Tree
(UVar
(STInfer
GHC.Prim.RealWorld))
T.Type>_N ; GHC.ST.N:ST[0]
<GHC.Prim.RealWorld>_N
<Maybe
(Tree
(UVar
(STInfer
GHC.Prim.RealWorld))
T.Type)>_R)))))))))_R
:: GHC.Prim.State# (World (STInfer GHC.Prim.RealWorld))
~R# GHC.Prim.State# GHC.Prim.RealWorld),
密码在哪里?大多数情况下需要向右滚动很多才能看到,而且主要是每行一个单词的类型注释。很难理解,我想知道是否可以做得更好。
我尝试使用 hindent
、brittany
和 stylish-haskell
来格式化文件(它基本上是 Haskell 的变体,不是吗?)但是 none 的支持者..
我还看到了 ghc-core
工具,它应该会产生可读的输出,但我没弄清楚如何在基于堆栈的项目中使用它(它包装了系统 GHC?)。
关于如何使核心更具可读性的任何建议?
您正在寻找 these options。具体来说,您需要 -dsuppress-coercions
,它应该将巨大的 `cast` ...
缩小为 `cast` <Co:5>
.
当 运行 GHC 与 -ddump-simpl
时,我得到 .dump-simpl
格式非常难以阅读的文件。
示例片段:
{ (# ipv_aAYC, ipv1_aAYD #) ->
(# ipv_aAYC
`cast` ((GHC.Prim.State#
(Lamdu.Calc.Infer.R:WorldSTInfer[0]
<GHC.Prim.RealWorld>_N ; (Control.Monad.ST.Class.D:R:Worldt[0]
<ReaderT
(InferEnv
(STVar GHC.Prim.RealWorld),
STRef
GHC.Prim.RealWorld
Lamdu.Calc.Infer.QVarGen)>_N
<MaybeT
(GHC.ST.ST
GHC.Prim.RealWorld)>_N ; (Control.Monad.ST.Class.D:R:Worldt[0]
<MaybeT>_N
<GHC.ST.ST
GHC.Prim.RealWorld>_N ; Control.Monad.ST.Class.D:R:WorldST[0]
(Nth:0
(Nth:2
(Nth:3
(Nth:3
(<(InferEnv
(STVar
GHC.Prim.RealWorld),
STRef
GHC.Prim.RealWorld
Lamdu.Calc.Infer.QVarGen)>_R
->_R Sym (GHC.ST.N:ST[0]
<GHC.Prim.RealWorld>_N
<Maybe
(STVar
(World
(STInfer
GHC.Prim.RealWorld))
('Knot
T.Type))>_R) ; Sym (Control.Monad.Trans.Maybe.N:MaybeT[0]
<GHC.ST.ST
GHC.Prim.RealWorld>_R
(Lamdu.Calc.Infer.D:R:UVarSTInfer[0]
(Sym (Control.Monad.ST.Class.D:R:WorldST[0]
<GHC.Prim.RealWorld>_N) ; (Sym (Control.Monad.ST.Class.D:R:Worldt[0]
<MaybeT>_N
<GHC.ST.ST
GHC.Prim.RealWorld>_N) ; (Sym (Control.Monad.ST.Class.D:R:Worldt[0]
<ReaderT
(InferEnv
(STVar
GHC.Prim.RealWorld),
STRef
GHC.Prim.RealWorld
Lamdu.Calc.Infer.QVarGen)>_N
<MaybeT
(GHC.ST.ST
GHC.Prim.RealWorld)>_N) ; Sym (Lamdu.Calc.Infer.R:WorldSTInfer[0]
<GHC.Prim.RealWorld>_N)))) <'Knot
T.Type>_N))) ; (Control.Monad.Trans.Maybe.N:MaybeT[0]
<GHC.ST.ST
GHC.Prim.RealWorld>_R
<Tree
(UVar
(STInfer
GHC.Prim.RealWorld))
T.Type>_N ; GHC.ST.N:ST[0]
<GHC.Prim.RealWorld>_N
<Maybe
(Tree
(UVar
(STInfer
GHC.Prim.RealWorld))
T.Type)>_R)))))))))_R
:: GHC.Prim.State# (World (STInfer GHC.Prim.RealWorld))
~R# GHC.Prim.State# GHC.Prim.RealWorld),
密码在哪里?大多数情况下需要向右滚动很多才能看到,而且主要是每行一个单词的类型注释。很难理解,我想知道是否可以做得更好。
我尝试使用 hindent
、brittany
和 stylish-haskell
来格式化文件(它基本上是 Haskell 的变体,不是吗?)但是 none 的支持者..
我还看到了 ghc-core
工具,它应该会产生可读的输出,但我没弄清楚如何在基于堆栈的项目中使用它(它包装了系统 GHC?)。
关于如何使核心更具可读性的任何建议?
您正在寻找 these options。具体来说,您需要 -dsuppress-coercions
,它应该将巨大的 `cast` ...
缩小为 `cast` <Co:5>
.