gpt4 book ai didi

Haskell 代码格式化

转载 作者:行者123 更新时间:2023-12-04 18:47:54 28 4
gpt4 key购买 nike

Haskell 有基于缩进的 block 样式。我知道两种风格,但我无法决定哪种风格更好。 (原谅我一个非常愚蠢的示例函数)

第一 - 漂亮:

funcA :: Integer -> IO ()
funcA n = if n == 0
then putStrLn "zero"
else do putStr "--> "
print n

这种风格看起来很棒,但很脆弱:让我们重构这段代码并重命名 funcA - 我们需要重新缩进 then , else以及 do 中的所有表达式. n 的重命名相同.这很烦人。非常。

编辑 正如 FUZxxl 所提到的,行变得越来越长,但其中大多数 - 开头的空格。

另一种风格是重构友好,但不是那么漂亮:
funcA :: Integer -> IO ()
funcA n = if n == 0
then putStrLn "zero"
else do
putStr "zero"
print n

你喜欢什么风格,为什么?可能你有另一个,或者你有一个链接到一些伟大的开发人员的代码风格和解释?

最佳答案

就个人而言,我使用两种风格的混合。

当下一个“漂亮”的缩进层不是太远时,我使用第一种样式

do foo
bar
baz

但是当一个漂亮的缩进会导致代码在右侧太远时,我只使用两个空格
case foo of
a -> bar
b -> baz
c -> quux

当我的缩进超过 20 个空格时,我经常“重置”缩进级别:
do a
b <- do c -- normally I use only two whitespaces here
d
e <- do
f
g
h

如果您可以将列表中的第一个放在关键字之后,我只会在使用漂亮样式时这样做
 main = do x
y
z where
a = b
c = d
e = f

你的例子
funcA :: Integer -> IO ()
funcA n = if n == 0
then putStrLn "zero"
else do putStr "--> "
print n

然而,在本例中,我将重构代码以使用模式匹配和显式一元操作(在本例中为 >>),替换 do .如果 do很短,不要做。
funcA :: Integer -> IO ()
funcA 0 = putStrLn "zero"
funcA n = putStr "--> " >> print n

关于Haskell 代码格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195758/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com