Joh*_*ler 5 haskell coding-style naming-conventions
这是一个编码风格的问题而不是技术问题.
我经常遇到一个问题,我使用haskell(不太理想)的记录语法(或镜头,问题最终相同)来创建一个data类型.我最终得到了以我的字段命名的字段访问器函数.作为一名尽职尽责的程序员,我试图使我的记录字段名称有意义.
稍后我需要从我的类型中获取一个字段并将其值保存在局部变量中.这通常在do块中的StateMonad中完成.问题是我称之为局部变量.最明显的名称已被视为字段访问者.我发现我的自我使用缩写,这往往会使我的代码可读性降低.
是否存在解决此问题的Haskell编码约定?
例
data Qaax = Qaax {
foo :: SomeFoo
, bar :: SomeBar
, ...
}
baz :: (MonadState Qaax m) => (...) -> m ()
baz (...) = do
f <- gets foo -- I'd really like to use something more descriptive then
-- `f` but `foo` is already taken.
...
return ()
Run Code Online (Sandbox Code Playgroud)
添加 ' 作为后缀是形成不同但相关的名称的既定惯例。一个关键的例子是foldl和foldl'。
在导出的名称中foldl',通常最好为 ' 对您的库的含义提出一致的主题(通常是“更严格的版本”,如 中所示foldl')。但在本地名称中,您可以更自由地使用它“我希望与另一个密切相关的事物具有相同的名称”。
缺点是它不太明显,因此会损害可读性;特别是当您需要共同引用这两个版本时。当您发现自己需要时,foo'''您可能应该考虑不同的命名方案!