@@ -93,10 +93,12 @@ elabImplementation info syn doc argDocs what fc cs parents acc opts n nfc ps pex
9393 -- if the implementation type matches any of the implementations we have already,
9494 -- and it's not a named implementation, then it's overlapping, so report an error
9595 case expn of
96− Nothing -> do mapM_ (maybe (return ()) overlapping . findOverlapping ist (interface_determiners ci) (delab ist nty))
96+ Nothing
97+ | OverlappingDictionary `notElem` opts ->
98+ do mapM_ (maybe (return ()) overlapping . findOverlapping ist (interface_determiners ci) (delab ist nty))
9799 (map fst $ interface_implementations ci)
98100 addImplementation intImpl True n iname
99− Just _ -> addImplementation intImpl False n iname
101+ _ -> addImplementation intImpl False n iname
100102 when (what /= ETypes && (not (null ds && not emptyinterface))) $ do
101103 -- Add the parent implementation names to the privileged set
102104 oldOpen <- addOpenImpl parents
@@ -255,6 +257,8 @@ elabImplementation info syn doc argDocs what fc cs parents acc opts n nfc ps pex
255257
256258 findOverlapping i dets t n
257259 | SN (ParentN _ _) <- n = Nothing
260+ | Just opts <- lookupCtxtExact n (idris_flags i),
261+ OverlappingDictionary `elem` opts = Nothing
258262 | otherwise
259263 = case lookupTy n (tt_ctxt i) of
260264 [t'] -> let tret = getRetType t