我正在尝试重新格式化/重新打印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
获取包含评论的原始文件的精美印刷版本。
答案 0 :(得分:5)
使用模块的Annotated
版本,例如Language.Haskell.Exts.Annotated
vs Language.Haskell.Exts
。
答案 1 :(得分:3)
根据您想要做什么样的漂亮打印,您可能需要查看hscolour
包,该包用于将Haskell源代码着色为各种输出格式。
特别是,模块Language.Haskell.HsColour.Classify包含一个Haskell标记器,它保留空格和注释,这可能是一个很好的起点。