我使用了来自Hackage(network-uri
)的程序包,其中包含Show
的非标准实例,我需要对其进行覆盖(以使用相应的Read
实例)。我了解overlapping
杂注是专门为这种情况而创建的,在这种情况下,包中的一个实例需要被排除。
我有验证码
deriving instance {-# Overlapping #-} Show N.URI
我收到错误消息:
Duplicate instance declarations:
instance [overlapping] Show N.URI
-- Defined at Uniform/HttpURI.hs:54:1
instance [safe] Show N.URI -- Defined in ‘Network.URI’ |
54 | deriving instance {-# Overlapping #-} Show N.URI
要实现包中实例的预期覆盖,还需要哪些附加编码? safe
有问题吗?我已添加
{-# LANGUAGE Unsafe #-}
但错误仍然存在。添加
{-# LANGUAGE IncoherentInstances #-}
也没有效果。缺什么?
PS。我了解程序包作者可能出于某些原因为Show
提供了此实例,但是程序包的用户应该可以覆盖它。