Пусть у меня есть некоторые константы, которые я хочу назвать:Тип объявления для констант
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
бы, что считается хорошим стилем? Что такое конвенция?
Update
На самом деле, похоже, GHC не рассматривает последний пример, имеющие какие-либо заявления типа вообще, так как он предупреждает о «верхнем уровне связывания без указания типа подписи».
На самом деле, из-за ограничения мономорфизма, тип по умолчанию * не будет * быть «Num a => a'. Но может потребоваться другой тип, чем GHC выбирает по умолчанию, так что это по-прежнему важный вопрос. – delnan
Я бы предпочел эту версию 'foo, bar, baz :: Int', но это вопрос вкуса. – adamse
На самом деле, похоже, что GHC не рассматривает последний пример, имеющий какие-либо объявления типа, поскольку он предупреждает о «привязке верхнего уровня без подписи типа». –