haskell - Aumentar el "ancho" de ghci
(1)
Hay tres opciones que controlan la impresión bonita:
-dppr-debug Turn on debug printing (more verbose)
-dppr-user-length Set the depth for printing expressions in error msgs
-dppr-cols⟨N⟩ Set the width of debugging output. For example -dppr-cols200
Estás buscando -dppr-cols
. Su valor predeterminado es 100
. Puede configurarlo en cualquier otro valor, ya sea cuando llame a GHCi o con :set
.
Comparación de las opciones
Sin -dppr-cols
$ ghci NewType_makeLenses.hs
[1 of 1] Compiling Main ( NewType_makeLenses.hs, interpreted )
Ok, modules loaded: Main.
> :i bar
bar :: Lens'' (Foo a0) Int -- Defined at NewType_makeLenses.hs:9:1
> :i baz
baz :: Lens (Foo a0) (Foo a1) a0 a1
-- Defined at NewType_makeLenses.hs:10:1
Con -dppr-cols140
$ ghci -dppr-cols140 NewType_makeLenses.hs
[1 of 1] Compiling Main ( NewType_makeLenses.hs, interpreted )
Ok, modules loaded: Main.
> :i bar
bar :: Lens'' (Foo a0) Int -- Defined at NewType_makeLenses.hs:9:1
> :i baz
baz :: Lens (Foo a0) (Foo a1) a0 a1 -- Defined at NewType_makeLenses.hs:10:1
Con :set -dppr-cols140
$ ghci NewType_makeLenses.hs
[1 of 1] Compiling Main ( NewType_makeLenses.hs, interpreted )
Ok, modules loaded: Main.
> :set -dppr-cols140
> :i bar
bar :: Lens'' (Foo a0) Int -- Defined at NewType_makeLenses.hs:9:1
> :i baz
baz :: Lens (Foo a0) (Foo a1) a0 a1 -- Defined at NewType_makeLenses.hs:10:1
Bonus: ¿Cómo encontré esto?
No miré las banderas, en cambio, miré el código fuente de GHC:
$ git clone --depth=1 https://github.com/ghc/ghc.git && cd ghc
A continuación, busco una cadena que comienza con "Defined
:
$ grep -C2 "/"Defined" -r . --exclude-dir=testsuite
./compiler/basicTypes/Name.hs-ppr_z_occ_name occ = ztext (zEncodeFS (occNameFS occ))
./compiler/basicTypes/Name.hs-
./compiler/basicTypes/Name.hs:-- Prints (if mod information is available) "Defined at <loc>" or
./compiler/basicTypes/Name.hs:-- "Defined in <mod>" information for a Name.
./compiler/basicTypes/Name.hs-pprDefinedAt :: Name -> SDoc
./compiler/basicTypes/Name.hs:pprDefinedAt name = text "Defined" <+> pprNameDefnLoc name
./compiler/basicTypes/Name.hs-
./compiler/basicTypes/Name.hs-pprNameDefnLoc :: Name -> SDoc
SDoc
parece interesante.
$ grep "data SDoc" -r . --exclude-dir=testsuite
./compiler/utils/Outputable.hs:data SDocContext = SDC
./compiler/utils/Outputable.hs-boot:data SDoc
Outputable.hs
incluye printForUser
, que usa pprCol dflags
junto con printDoc
de Pretty
. printDoc
se define como
printDoc :: Mode -> Int -> Handle -> Doc -> IO ()
-- printDoc adds a newline to the end
printDoc mode cols hdl doc = printDoc_ mode cols hdl (doc $$ text "")
y pprCol
se define en el compiler/main/DynFlags.hs
, donde corresponde a -dppr-cols
. Puedes simplemente ir a través de GHC :).
Cuando una línea de salida es demasiado larga en GHCI, se rompe:
> :i bar
bar :: Lens'' (Foo a0) Int -- Defined at NewType_makeLenses.hs:7:1
> :i baz
baz :: Lens (Foo a0) (Foo a1) a0 a1
-- Defined at NewType_makeLenses.hs:7:1
¿Hay una manera de establecer la longitud máxima de las líneas?