Новый ответ
Я сейчас написал 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 для переформатирования каждый раз, когда вы нажимаете save или что-то еще.