标准放置类型声明

时间:2013-04-13 06:53:36

标签: haskell coding-style standards

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中,它们来自外部世界的可访问性是否会影响其类型声明的位置?

1 个答案:

答案 0 :(得分:16)

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

如果一切都很接近,则更容易修改和更新功能。在阅读代码时,它还有助于将类型签名和功能放在一起 - 这样您就不必在文件的不同部分查找签名或记住它。

您提出的替代风格更适合获取模块摘要。令人高兴的是,我们可以使用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

因此,将所有签名放在顶部的风格并没有太多推荐它并且没有被使用。