我正在使用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
| ^^^^^^^^^^^
我应该为此担心吗,并确保对滴答作响的构造函数保持谨慎?还是应该关闭警告?