haskell ghci

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?