Я пытаюсь переформатировать / перепечатать исходный код haskell (удалить / добавить пробелы, переносы строк, изменить стиль отступа ... ). Я нашел пакет haskell-src-exts , который может анализировать и распечатывать исходный код haskell.
Используя функцию parseFileWithComments :: ParseMode -> FilePath -> IO (ParseResult (Module, [Comment]))
Я также получаю комментарии, включенные в исходный код. Теперь я хочу напечатать модуль / 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
, чтобы получить красиво распечатанную версию исходного файла, включая комментарии.