Форматирование ядра GHC? - PullRequest
       10

Форматирование ядра GHC?

0 голосов
/ 21 января 2019

При запуске 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, не так ли?), Но никто из них не поддерживает это.

Я также видел инструмент ghc-core, который должен давать читабельный вывод, но я не смог понять, как использовать его в стековом проекте (он обертывает систему GHC?).

Какой-нибудь совет, как сделать ядро ​​более читабельным?

1 Ответ

0 голосов
/ 22 января 2019

Вы ищете эти опции .В частности, вам нужен -dsuppress-coercions, который должен сжать этот огромный `cast` ... в нечто вроде `cast` <Co:5>.

...