Какие проблемы могут возникнуть из-за не приведенных в кавычки поднятых конструкторов? - PullRequest
3 голосов
/ 07 июня 2019

Я использую расширение GHC -XDataKinds и у меня включен -Wall в библиотеке на Haskell, которую я пишу.Я получаю предупреждение об использовании не отмеченных отмеченных конструкторов, поскольку -Wall подразумевает -Wunticked-promoted-constructors.Мне интересно, почему это предупреждение важно;если мне разрешено писать в непримеченном стиле в синтаксисе по умолчанию, в чем вред?

Большая часть написанного мной кода с зависимой типизацией написана в Идрисе (и немного в Агде), и поэтому я 'm используется для единого пространства имен типов и значений.Как таковая, для меня естественно писать в неприписанном стиле.Однако, если в этом есть потенциальный вред, я добавлю галочки.Но я не хочу этого делать, не понимая почему.

Так, например, если у меня есть такой тип данных:

data HasDefault = IsDefaulted | NotDefaulted

, который используется в сигнатуре функции, подобной этой:

setDefault :: a -> T p NotDefaulted a -> T p IsDefaulted a

тогда я получаю предупреждение вот так (с также установленным -Werror):

C:\path-to-my-lib\src\Lib.hs:103:46: error: [-Wunticked-promoted-constructors, -Werror=unticked-promoted-constructors]
    Unticked promoted constructor: `IsDefaulted'.
    Use 'IsDefaulted instead of `IsDefaulted'.
    |
103 | setDefault :: a -> T p NotDefaulted a -> T p IsDefaulted a
    |                                              ^^^^^^^^^^^

Должен ли я беспокоиться об этом и быть уверенным в том, что тикаетподнял конструкторы?Или я должен выключить предупреждение?

...