@@ -10,7 +10,8 @@ The implementation is similar to that shown in the paper.
1010module Data.Type.Map (Mapping(..), Union, Unionable, union, Var(..), Map(..),
1111 Combine, Combinable(..), Cmp,
1212 Nubable, nub,
13− Lookup, Member, (:\), Split, split, IsMap,
13+ Lookup, Member, (:\), Split, split,
14+ IsMap, AsMap, asMap,
1415 Submap, submap) where
1516
1617import GHC.TypeLits
@@ -150,15 +151,15 @@ instance Nubable '[] where
150151instance Nubable '[e] where
151152 nub (Ext k v Empty) = Ext k v Empty
152153
153−instance {-# OVERLAPPING #-}
154− (Combinable v v', Nubable ((k :-> Combine v v') ': s)) => Nubable ((k :-> v) ': (k :-> v') ': s) where
155− nub (Ext k v (Ext k' v' s)) = nub (Ext k (combine v v') s)
156−
157−instance {-# OVERLAPPING #-}
154+instance {-# OVERLAPABLE #-}
158155 (Nub (e ': f ': s) ~ (e ': Nub (f ': s)),
159156 Nubable (f ': s)) => Nubable (e ': f ': s) where
160157 nub (Ext k v (Ext k' v' s)) = Ext k v (nub (Ext k' v' s))
161158
159+instance {-# OVERLAPS #-}
160+ (Combinable v v', Nubable ((k :-> Combine v v') ': s)) => Nubable ((k :-> v) ': (k :-> v') ': s) where
161+ nub (Ext k v (Ext k' v' s)) = nub (Ext k (combine v v') s)
162+
162163
163164class Conder g where
164165 cond :: Proxy g -> Map s -> Map t -> Map (If g s t)