câu trả lời mới
bây giờ tôi đã viết hindent, được viết về haskell-src-exts. Nó có hỗ trợ Emacs và Vim.
Cũ câu trả lời
Có haskell-src-exts mà sẽ phân tích mã của bạn và nó có một module in khá để in AST thành một chuỗi. Ví dụ.
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)
Ví dụ:
λ> putStrLn $ codeFormat "module X where x = 1 where { y 1 = 2; y _ = 2 }"
module X where
x = 1
where y 1 = 2
y _ = 2
Hoặc bạn có thể viết một máy in khá chính mình (thậm chí dựa trên trên nếu bạn chỉ muốn chuyên), và sau đó bạn có thể có bất cứ điều gì theo phong cách mà bạn muốn. Thay thế prettyPrint
bằng của riêng bạn. AST rất thẳng về phía trước.
Sau đó, bạn có thể kết nối nó với Emacs để định dạng lại mỗi khi bạn nhấn lưu hoặc một cái gì đó.
Nguồn
2011-07-29 08:49:52
Một vài năm muộn nhưng hiện tại không có hiện tượng hindent, tôi đã cập nhật câu trả lời chấp nhận của mình với nó. –
kiểm tra brittany –