data A = A {
a :: Double
}
deriving(Eq, Show)
,但現在我更喜歡
data A = A {
a :: Double
} deriving(Eq, Show)
我認爲答案是否定的,但無論如何,我問:有沒有Haskell的代碼格式?
data A = A {
a :: Double
}
deriving(Eq, Show)
,但現在我更喜歡
data A = A {
a :: Double
} deriving(Eq, Show)
我認爲答案是否定的,但無論如何,我問:有沒有Haskell的代碼格式?
我現在已經寫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把它與每次你保存或者其他東西時重新格式化。
我爲此寫了一個小腳本:https://github.com/djv/small/blob/master/tidy.hs 我從vim調用它來重新格式化我的代碼。
有stylish-haskell它可以做你想要的。
要打印的AST有意見,你就需要ExactPrint
exactPrint :: ExactP ast => ast SrcSpanInfo -> [Comment] -> String
但exactPrint
不會漂亮打印來源。
我寫了a small tool你可以用Vim作爲外部格式化程序調用它。
prettyHS :: String -> String
prettyHS src
= case parseFileContentsWithComments defaultParseMode src of
ParseOk (ast, _) -> prettyPrint ast
_ -> src
幾年遲到但現在存在,我已經用它更新了我的接受答案。 –
check out brittany –