on master help sign in
style: refactor and rename so things are less crazy
commit12fe8970222a53d586675acfa266352285b043ec authorEvan Czaplicki <info@elm-lang.org> dateWed 19 Nov 2014, 15:14 (12 years ago) parent87ba2bc
1 file changed+17−14
src/Type/Unify.hs+17−14
src/Type/Unify.hs+17−14
@@ -183,35 +183,38 @@ actuallyUnify region variable1 variable2 = do
183183 let mkRecord fs ext =
184184 fresh (Just (Record1 fs ext))
185185
186− case (Map.null fields1', Map.null fields2') of
186+ let uniqueFields1 = diffFields fields1 fields2
187+ let uniqueFields2 = diffFields fields2 fields1
188+
189+ case (Map.null uniqueFields1, Map.null uniqueFields2) of
187190 (True, True) ->
188191 unify' ext1 ext2
189192
190193 (True, False) ->
191− do record2' <- mkRecord fields2' ext2
194+ do record2' <- mkRecord uniqueFields2 ext2
192195 unify' ext1 record2'
193196
194197 (False, True) ->
195− do record1' <- mkRecord fields1' ext1
198+ do record1' <- mkRecord uniqueFields1 ext1
196199 unify' record1' ext2
197200
198201 (False, False) ->
199− do record1' <- mkRecord fields1' =<< fresh Nothing
200− record2' <- mkRecord fields2' =<< fresh Nothing
202+ do record1' <- mkRecord uniqueFields1 =<< fresh Nothing
203+ record2' <- mkRecord uniqueFields2 =<< fresh Nothing
201204 unify' record1' ext2
202205 unify' ext1 record2'
203− where
204− fields1' = unmerged fields1 fields2
205− fields2' = unmerged fields2 fields1
206206
207− unmerged a b =
208− Map.union (Map.intersectionWith eat a b) a
209− |> Map.filter (not . null)
207+ _ -> TS.addError region Nothing variable1 variable2
208+
210209
211− eat (_:xs) (_:ys) = eat xs ys
212− eat xs _ = xs
210+diffFields :: Map.Map String [a] -> Map.Map String [a] -> Map.Map String [a]
211+diffFields fields1 fields2 =
212+ let eat (_:xs) (_:ys) = eat xs ys
213+ eat xs _ = xs
214+ in
215+ Map.union (Map.intersectionWith eat fields1 fields2) fields1
216+ |> Map.filter (not . null)
213217
214− _ -> TS.addError region Nothing variable1 variable2
215218
216219combinedDescriptors :: Descriptor -> Descriptor
217220 -> (Maybe Var.Canonical, Flex, Int, Maybe Var.Canonical)