首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为GADT中无法访问的代码启用“-fno-警告-”

为GADT中无法访问的代码启用“-fno-警告-”
EN

Stack Overflow用户
提问于 2013-11-12 20:55:29
回答 1查看 105关注 0票数 4

给定由幻影变量索引的GADT,我可以使用独立派生来创建一些简单的实例

代码语言:javascript
复制
data Client
data Temporary
data Permanent

data Token ty where
  ClientToken :: Token Client
  TemporaryToken :: ByteString -> ByteString -> Token Temporary
  PermanentToken :: ByteString -> ByteString -> Token Permanent

deriving instance Eq (Token Client)
deriving instance Eq (Token Temporary)
deriving instance Eq (Token Permanent)

在GHCi中似乎工作得很好

代码语言:javascript
复制
> ClientToken == ClientToken
True
> TemporaryToken "" "foo" == TemporaryToken "" "bar"
False

但是,当我试图编译时,我会收到一个警告。

代码语言:javascript
复制
src/Network/HTTP/Conduit/OAuth/Types/Credentials.hs:72:1:
    Couldn't match type `Client' with `Temporary'
    Inaccessible code in
      a pattern with constructor
        TemporaryToken :: S8.ByteString
                          -> S8.ByteString -> Token Temporary,
      in an equation for `=='
    In the pattern: TemporaryToken a1 a2
    In an equation for `==':
        == (TemporaryToken a1 a2) (TemporaryToken b1 b2)
          = (((a1 == b1)) && ((a2 == b2)))
    When typechecking the code for  `=='
      in a standalone derived instance for `Eq (Token Client)':
      To see the code I am typechecking, use -ddump-deriv
    In the instance declaration for `Eq (Token Client)'

这似乎是GADT派生代码(re:Haskell Inaccessible code bug?https://ghc.haskell.org/trac/ghc/ticket/8128)中的一个but,但是由于它似乎有正确的行为,我想知道

  1. 我可以使用一些-fno-warn-*标志关闭这些警告吗?如果可能的话
  2. 这样做有什么副作用吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-12 21:06:38

我在GHC7.6.3中测试了您的示例代码,至少在那里我得到了一个实际的编译错误,而不是GHCi和编译时的警告。自动实例派生似乎不够聪明,无法意识到它只需要将单个构造函数与给定的GADT匹配。

但是,下面的工作

代码语言:javascript
复制
data Client
data Temporary
data Permanent

data Token ty where
  ClientToken :: Token Client
  TemporaryToken :: ByteString -> ByteString -> Token Temporary
  PermanentToken :: ByteString -> ByteString -> Token Permanent

deriving instance Eq (Token ty)

但也许你真正的用例更复杂?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19939691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档