【问题标题】:Standard placement of type declarations类型声明的标准放置
【发布时间】:2013-04-13 06:53:35
【问题描述】:

Haskell 中类型声明的位置有标准吗?

例如,假设我有两个函数:

abs' x = if x >= 0 then x else -x

pow x 0 = 1
pow x e = x * (pow x (e-1))

它们的类型声明是:

abs' :: Int -> Int
pow :: Int -> Int -> Int

将声明放在文件顶部是否更合适/可读,例如:

abs' :: Int -> Int
pow :: Int -> Int -> Int

abs' x = if x >= 0 then x else -x

pow x 0 = 1
pow x e = x * (pow x (e-1))

或者将每个放在其各自的功能之上,如:

abs' :: Int -> Int
abs' x = if x >= 0 then x else -x

pow :: Int -> Int -> Int
pow x 0 = 1
pow x e = x * (pow x (e-1))

无论哪种方式对我来说都是完全可行的,所以我想知道是否有任何标准。另外,假设这些在module 中,它们从外部世界的可访问性会影响它们类型声明的位置吗?

【问题讨论】:

    标签: haskell coding-style standards


    【解决方案1】:

    最常见的样式是将类型签名直接放在函数上方,而不管它是否被导出。

    如果一切都靠得很近,修改和更新函数会更容易。在阅读代码时将类型签名和函数放在一起也很有帮助——这样您就不必在文件的不同部分查找签名或记住它。

    您提出的替代样式更适合获取模块的摘要。幸运的是,我们可以使用 GHCi 中的:browse 命令轻松地做到这一点:

    *Main> :browse Data.Function
    Data.Function.fix :: (a -> a) -> a
    Data.Function.on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
    ($) :: (a -> b) -> a -> b
    (.) :: (b -> c) -> (a -> b) -> a -> c
    const :: a -> b -> a
    flip :: (a -> b -> c) -> b -> a -> c
    id :: a -> a
    

    所以把所有的签名都放在最上面的风格确实没什么好推荐的,也没有使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2019-07-11
      • 2012-02-21
      相关资源
      最近更新 更多