on master help sign in
style: try to make things easier to read
commit87ba2bc74079f78ad373728625379c5b77cc8e6e authorEvan Czaplicki <info@elm-lang.org> dateWed 19 Nov 2014, 15:05 (12 years ago) parentdb0f872
1 file changed+34−18
src/Type/Unify.hs+34−18
src/Type/Unify.hs+34−18
@@ -12,12 +12,16 @@ import qualified Type.State as TS
1212import Type.Type
1313import Type.PrettyPrint
1414import Text.PrettyPrint (render)
15+import Elm.Utils ((|>))
16+
1517
1618unify :: A.Region -> Variable -> Variable -> StateT TS.SolverState IO ()
1719unify region variable1 variable2 = do
1820 equivalent <- liftIO $ UF.equivalent variable1 variable2
19− if equivalent then return ()
20− else actuallyUnify region variable1 variable2
21+ if equivalent
22+ then return ()
23+ else actuallyUnify region variable1 variable2
24+
2125
2226actuallyUnify :: A.Region -> Variable -> Variable -> StateT TS.SolverState IO ()
2327actuallyUnify region variable1 variable2 = do
@@ -171,26 +175,38 @@ actuallyUnify region variable1 variable2 = do
171175 (EmptyRecord1, Record1 fields ext) | Map.null fields -> unify' ext variable1
172176
173177 (Record1 fields1 ext1, Record1 fields2 ext2) ->
174− do sequence . concat . Map.elems $ Map.intersectionWith (zipWith unify') fields1 fields2
175− let mkRecord fs ext = fresh . Just $ Record1 fs ext
176− case (Map.null fields1', Map.null fields2') of
177− (True , True ) -> unify' ext1 ext2
178− (True , False) -> do
179− record2' <- mkRecord fields2' ext2
180− unify' ext1 record2'
181− (False, True ) -> do
182− record1' <- mkRecord fields1' ext1
183− unify' record1' ext2
184− (False, False) -> do
185− record1' <- mkRecord fields1' =<< fresh Nothing
186− record2' <- mkRecord fields2' =<< fresh Nothing
187− unify' record1' ext2
188− unify' ext1 record2'
178+ do Map.intersectionWith (zipWith unify') fields1 fields2
179+ |> Map.elems
180+ |> concat
181+ |> sequence
182+
183+ let mkRecord fs ext =
184+ fresh (Just (Record1 fs ext))
185+
186+ case (Map.null fields1', Map.null fields2') of
187+ (True, True) ->
188+ unify' ext1 ext2
189+
190+ (True, False) ->
191+ do record2' <- mkRecord fields2' ext2
192+ unify' ext1 record2'
193+
194+ (False, True) ->
195+ do record1' <- mkRecord fields1' ext1
196+ unify' record1' ext2
197+
198+ (False, False) ->
199+ do record1' <- mkRecord fields1' =<< fresh Nothing
200+ record2' <- mkRecord fields2' =<< fresh Nothing
201+ unify' record1' ext2
202+ unify' ext1 record2'
189203 where
190204 fields1' = unmerged fields1 fields2
191205 fields2' = unmerged fields2 fields1
192206
193− unmerged a b = Map.filter (not . null) $ Map.union (Map.intersectionWith eat a b) a
207+ unmerged a b =
208+ Map.union (Map.intersectionWith eat a b) a
209+ |> Map.filter (not . null)
194210
195211 eat (_:xs) (_:ys) = eat xs ys
196212 eat xs _ = xs