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
中,它们来自外部世界的可访问性是否会影响其类型声明的位置?
答案 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
因此,将所有签名放在顶部的风格并没有太多推荐它并且没有被使用。