diff options
Diffstat (limited to 'compiler/backpack/NameShape.hs')
-rw-r--r-- | compiler/backpack/NameShape.hs | 27 |
1 files changed, 2 insertions, 25 deletions
diff --git a/compiler/backpack/NameShape.hs b/compiler/backpack/NameShape.hs index 0a2d7ca319..da1b5ea4fe 100644 --- a/compiler/backpack/NameShape.hs +++ b/compiler/backpack/NameShape.hs @@ -22,9 +22,10 @@ import Name import NameEnv import TcRnMonad import Util -import ListSetOps import IfaceEnv +import Avail ( plusAvail ) + import Control.Monad -- Note [NameShape] @@ -196,30 +197,6 @@ mergeAvails as1 as2 = let mkNE as = mkNameEnv [(availName a, a) | a <- as] in nameEnvElts (plusNameEnv_C plusAvail (mkNE as1) (mkNE as2)) --- | Join two 'AvailInfo's together. -plusAvail :: AvailInfo -> AvailInfo -> AvailInfo -plusAvail a1 a2 - | debugIsOn && availName a1 /= availName a2 - = pprPanic "RnEnv.plusAvail names differ" (hsep [ppr a1,ppr a2]) -plusAvail a1@(Avail {}) (Avail {}) = a1 -plusAvail (AvailTC _ [] []) a2@(AvailTC {}) = a2 -plusAvail a1@(AvailTC {}) (AvailTC _ [] []) = a1 -plusAvail (AvailTC n1 (s1:ss1) fs1) (AvailTC n2 (s2:ss2) fs2) - = case (n1==s1, n2==s2) of -- Maintain invariant the parent is first - (True,True) -> AvailTC n1 (s1 : (ss1 `unionLists` ss2)) - (fs1 `unionLists` fs2) - (True,False) -> AvailTC n1 (s1 : (ss1 `unionLists` (s2:ss2))) - (fs1 `unionLists` fs2) - (False,True) -> AvailTC n1 (s2 : ((s1:ss1) `unionLists` ss2)) - (fs1 `unionLists` fs2) - (False,False) -> AvailTC n1 ((s1:ss1) `unionLists` (s2:ss2)) - (fs1 `unionLists` fs2) -plusAvail (AvailTC n1 ss1 fs1) (AvailTC _ [] fs2) - = AvailTC n1 ss1 (fs1 `unionLists` fs2) -plusAvail (AvailTC n1 [] fs1) (AvailTC _ ss2 fs2) - = AvailTC n1 ss2 (fs1 `unionLists` fs2) -plusAvail a1 a2 = pprPanic "RnEnv.plusAvail" (hsep [ppr a1,ppr a2]) - {- ************************************************************************ * * |