键入常量的声明

时间:2014-02-09 17:50:06

标签: haskell syntax type-declaration

假设我有一些我想要命名的常量:

foo = 1234
bar = 5678
baz = 1337

默认情况下,类型为Num a => a但是明确声明这些常量的类型不是一种好的做法吗?

这样做会非常冗长:

foo :: Int
foo = 1234

bar :: Int
bar = 5678

baz :: Int
baz = 1337

你可以这样做:

foo, bar, baz :: Int
foo = 1234
bar = 5678
baz = 1337

当没有太多但常数增加时,哪种方法可以正常工作,你可能需要对它们进行换行,而且,感觉就像是在重复自己。

这个怎么样?:

foo = 1234 :: Int
bar = 5678 :: Int
baz = 1337 :: Int

这会被认为是好风格吗?惯例是什么?

更新

实际上,似乎GHC并没有考虑最后一个具有任何类型声明的示例,因为它警告“没有类型签名的顶级绑定”。

1 个答案:

答案 0 :(得分:4)

当然,这取决于你想要所有这些常量的原因。我个人倾向于给出明确的类型签名,是的。如果您有很多要申报的内容,我可能会选择

foo = 1234 :: Int
bar = 5678 :: Int
baz = 1337 :: Int

GHC可能会警告错过顶级类型声明,但上述绑定完全是单态的,因此您不需要支付运行时多态性惩罚,并且代码清晰可读。 (您可以在以后轻松添加更多条目。)

我可能会询问为什么你需要定义这么多的整数常量,并且谦虚地建议可能有一些更惯用的方法来实现你想要做的事情 - 但那将成为另一个问题的主题。对于手头的问题,基本上你建议的任何选项都是“很好”,但我个人的偏好(就是这样)就是上面的例子。