| palm_mute ( @ 2007-08-31 15:42:00 |
| 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"))))
[]])
Граждане,
[1]ipprint-0.2.tar.gz
Update: благодаря Spenser'у Janssen'у (которому, собственно, принадлежит идея) ipprint теперь на Hackage:
http://hackage.haskell.org/cgi-bin/hack