取消报价的构造函数可能会导致什么问题?

时间:2019-06-07 18:23:16

标签: haskell ghc compiler-warnings data-kinds

我正在使用GHC扩展名-XDataKinds,并且在我正在编写的Haskell库中打开了-Wall。我收到有关使用未选中的提升构造函数的警告,因为-Wall暗示-Wunticked-promoted-constructors。我想知道为什么这个警告很重要;如果允许我使用默认语法以非常规样式书写,那有什么害处?

我编写的大多数依赖类型代码都在Idris中(而在Agda中则很少),因此我习惯了类型和值的统一命名空间。因此,以自然的风格写作对我来说很自然。但是,如果其中有潜在的危害,我将添加刻度线。但我不想在不理解原因的情况下这样做。

例如,如果我有这样的数据类型:

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
    |                                              ^^^^^^^^^^^

我应该为此担心吗,并确保对滴答作响的构造函数保持谨慎?还是应该关闭警告?

0 个答案:

没有答案