9

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))

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

4

1 回答 1

16

最常见的风格是将类型签名直接放在函数上方,无论它是否被导出。

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

您提出的替代样式对于获取模块的摘要会更好。令人高兴的是,我们可以使用:browseGHCi 中的命令轻松完成此操作:

*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

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

于 2013-04-13T07:02:51.543 回答