漂亮的打印haskell源代码与评论

时间:2012-02-22 09:55:07

标签: haskell pretty-print

我正在尝试重新格式化/重新打印haskell源代码(删除/添加空格,换行符,更改缩进样式......)。我找到了可以解析和漂亮打印haskell源代码的包haskell-src-exts

使用函数parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment]))我也得到了源代码中包含的注释。现在我想在原始位置打印带有注释的Module / AST,但我找不到能够做到这一点的功能。我只能打印AST。我是否必须自己实施AST的打印和评论?或者这样的库是否已经存在?

澄清以下示例:

文件A.hs:

module A (fn1) where

-- | Haddock-comment
fn1 ::
    String ->
    String
fn1 _ = "" -- another comment

在ghci中,输入

Prelude Control.Monad.Reader Language.Haskell.Exts> (liftM prettyPrint) $ (liftM fst) $ (liftM fromParseResult) $ parseFileWithComments defaultParseMode "A.hs"`

打印模块源代码(当然没有注释)。我可以使用任何prettyPrint - 函数来修改源代码格式。

现在我希望能够做到这样的事情:

do
    (ast, comments) <- fromParseResult $ parseFileWithComments defaultParseMode "A.hs"
    prettyPrintWithComments ast comments

获取包含评论的原始文件的精美印刷版本。

2 个答案:

答案 0 :(得分:5)

使用模块的Annotated版本,例如Language.Haskell.Exts.Annotated vs Language.Haskell.Exts

答案 1 :(得分:3)

根据您想要做什么样的漂亮打印,您可能需要查看hscolour包,该包用于将Haskell源代码着色为各种输出格式。

特别是,模块Language.Haskell.HsColour.Classify包含一个Haskell标记器,它保留空格和注释,这可能是一个很好的起点。