palm_mute ([info]palm_mute) wrote,
@ 2007-08-31 15:42:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:haskell, tips

Хозяйке на заметку
ghci иногда печатает трудночитаемую кашу:

Prelude> :m +Data.List
Prelude Data.List> tails $ tails [0..5]
[[[0,1,2,3,4,5],[1,2,3,4,5],[2,3,4,5],[3,4,5],[4,5],[5],[]],[[1
,2,3,4,5],[2,3,4,5],[3,4,5],[4,5],[5],[]],[[2,3,4,5],[3,4,5],[4,
5],[5],[]],[[3,4,5],[4,5],[5],[]],[[4,5],[5],[]],[[5],[]],[[]],[]]


По-моему, гораздо лучше читается это:
Prelude Data.List> :m + IPPrint
Prelude Data.List IPPrint> pprint $ tails $ tails [0..5]
    [[[0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [2, 3, 4, 5], [3, 4, 5],
      [4, 5], [5], []],
     [[1, 2, 3, 4, 5], [2, 3, 4, 5], [3, 4, 5], [4, 5], [5], []],
     [[2, 3, 4, 5], [3, 4, 5], [4, 5], [5], []],
     [[3, 4, 5], [4, 5], [5], []], [[4, 5], [5], []], [[5], []], [[]],
     []]


Вот еще более убедительный пример:
Prelude IPPrint Language.Haskell.Parser> parseModule "x=x"
ParseOk (HsModule (SrcLoc {srcFilename = "", srcLine = 1, srcColumn = 1
}) (Module "Main") (Just [HsEVar (UnQual (HsIdent "main"))]) [] [HsPatBind (SrcL
oc {srcFilename = "", srcLine = 1, srcColumn = 1}) (HsPVar (HsIdent "x"
)) (HsUnGuardedRhs (HsVar (UnQual (HsIdent "x")))) []])

vs
Prelude IPPrint Language.Haskell.Parser> pprint $ parseModule "x=x"
    ParseOk
      (HsModule
         (SrcLoc{srcFilename = "", srcLine = 1, srcColumn = 1})
         (Module "Main")
         (Just [HsEVar (UnQual (HsIdent "main"))])
         []
         [HsPatBind
            (SrcLoc{srcFilename = "", srcLine = 1, srcColumn = 1})
            (HsPVar (HsIdent "x"))
            (HsUnGuardedRhs (HsVar (UnQual (HsIdent "x"))))
            []])


Граждане, которые приобретут Visual Studio Team System и Team Foundation Server в предложенных типовых минимальных конфигурациях (или аналогичных по цене) которые скачают файлик [1] и установят обычной процедурой "runhaskell Setup.hs configure && runhaskell Setup.hs build && runhaskell Setup.hs install" смогут pprint'ить что душе угодно (есть ограничение - выхлоп функции show должен быть синтаксически корректным Haskell-выражением).

[1]ipprint-0.2.tar.gz
Update: благодаря Spenser'у Janssen'у (которому, собственно, принадлежит идея) ipprint теперь на Hackage:
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/ipprint


(Post a new comment)


[info]deni_ok
2007-08-31 02:06 pm UTC (link)
Спасибо, будем пользоваться, преттипринтить, автора добрым словом поминать :)

(Reply to this)


[info]thesz
2007-08-31 02:36 pm UTC (link)
Запомним. ;)

(Reply to this)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…