Ответ 1
Новый ответ
Теперь я написал hindent, который написан в терминах haskell-src-exts. Он поддерживает Emacs и Vim.
Старый ответ
Существует haskell-src-exts, который будет анализировать ваш код, и у него есть довольно печатный модуль для печати AST для строки. Например.
import Language.Haskell.Exts
main = interact codeFormat
codeFormat = check . fmap reformat . parseModuleWithComments where
reformat = prettyPrint
check r = case r of
ParseOk a -> a
ParseFailed loc err -> error $ show (loc,err)
Пример:
λ> putStrLn $ codeFormat "module X where x = 1 where { y 1 = 2; y _ = 2 }"
module X where
x = 1
where y 1 = 2
y _ = 2
В качестве альтернативы вы можете написать довольно принтер самостоятельно (даже на основе вышеизложенного, если вы просто хотите специализироваться), а затем вы можете иметь любой стиль, который вы хотите. Замените prettyPrint
своим. AST очень прост.
Затем вы можете подключить его с помощью Emacs для переформатирования каждый раз, когда вы нажимаете "Сохранить" или что-то в этом роде.