перекрывающиеся экземпляры с прагмой {- # Overlapping # -}, но все равно ошибка компилятора - PullRequest
0 голосов
/ 26 апреля 2019

Я использую пакет из 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, но пользователь пакета должен иметь возможность переопределить его.

...