on master help sign in
cosmetic: break up Type.Unify.combinedDescriptors
commit0a16ca828bb0f817a7e3069d2857e243c7ce0ba3 authorEvan Czaplicki <info@elm-lang.org> dateTue 13 Oct 2015, 19:16 (11 years ago) parent5a1caab
1 file changed+57−47
src/Type/Unify.hs+57−47
src/Type/Unify.hs+57−47
@@ -71,7 +71,10 @@ actuallyUnify :: Variable -> Variable -> Unify ()
7171actuallyUnify variable1 variable2 = do
7272 desc1 <- liftIO $ UF.descriptor variable1
7373 desc2 <- liftIO $ UF.descriptor variable2
74− let (name', flex', rank', alias') = combinedDescriptors desc1 desc2
74+ let name' = pickName desc1 desc2
75+ flex' = pickFlex desc1 desc2
76+ rank' = pickRank desc1 desc2
77+ alias' = pickAlias desc1 desc2
7578
7679 merge1 :: Unify ()
7780 merge1 =
@@ -170,7 +173,7 @@ actuallyUnify variable1 variable2 = do
170173 cmpVars <- liftIO $ forM [1..length vs] $ \_ -> variable (Is Comparable)
171174 zipWithM_ unifyHelp vs cmpVars
172175
173− unifyAppendable v cvar@(Var.Canonical home name) =
176+ unifyAppendable v cvar =
174177 let
175178 canUnify =
176179 Var.isPrim "String" cvar
@@ -389,50 +392,57 @@ gatherFields var =
389392fieldMismatchError :: Map.Map String a -> String
390393fieldMismatchError missingFields =
391394 case Map.keys missingFields of
392− [] -> ""
395+ [] ->
396+ ""
397+
393398 [key] ->
394− "Looks like a record is missing the field `" ++ key ++ "`"
399+ "Looks like a record is missing the field `" ++ key ++ "`"
400+
395401 keys ->
396− "Looks like a record is missing fields "
397− ++ List.intercalate ", " (init keys) ++ ", and " ++ last keys
398−
399−
400−combinedDescriptors
401− :: Descriptor
402− -> Descriptor
403− -> (Maybe Var.Canonical, Flex, Int, Alias Variable)
404−combinedDescriptors desc1 desc2 =
405− (name', flex', rank', alias')
406− where
407− rank' :: Int
408− rank' =
409− min (rank desc1) (rank desc2)
410−
411− alias' :: Alias Variable
412− alias' =
413− alias desc1 <|> alias desc2
414−
415− name' :: Maybe Var.Canonical
416− name' =
417− case (name desc1, name desc2) of
418− (Just name1, Just name2) ->
419− case (flex desc1, flex desc2) of
420− (_, Flexible) -> Just name1
421− (Flexible, _) -> Just name2
422− (Is Number, Is _) -> Just name1
423− (Is _, Is Number) -> Just name2
424− (Is _, Is _) -> Just name1
425− (_, _) -> Nothing
426− (Just name1, _) -> Just name1
427− (_, Just name2) -> Just name2
428− _ -> Nothing
429−
430− flex' :: Flex
431− flex' =
432− case (flex desc1, flex desc2) of
433− (f, Flexible) -> f
434− (Flexible, f) -> f
435− (Is Number, Is _) -> Is Number
436− (Is _, Is Number) -> Is Number
437− (Is super, Is _) -> Is super
438− (_, _) -> Flexible
402+ "Looks like a record is missing fields "
403+ ++ List.intercalate ", " (init keys) ++ ", and " ++ last keys
404+
405+
406+
407+pickAlias :: Descriptor -> Descriptor -> Alias Variable
408+pickAlias desc1 desc2 =
409+ alias desc1 <|> alias desc2
410+
411+
412+pickRank :: Descriptor -> Descriptor -> Int
413+pickRank desc1 desc2 =
414+ min (rank desc1) (rank desc2)
415+
416+
417+pickFlex :: Descriptor -> Descriptor -> Flex
418+pickFlex desc1 desc2 =
419+ case (flex desc1, flex desc2) of
420+ ( f , Flexible ) -> f
421+ ( Flexible , f ) -> f
422+ ( Is Number , Is _ ) -> Is Number
423+ ( Is _ , Is Number ) -> Is Number
424+ ( Is super , Is _ ) -> Is super
425+ ( _ , _ ) -> Flexible
426+
427+
428+pickName :: Descriptor -> Descriptor -> Maybe Var.Canonical
429+pickName desc1 desc2 =
430+ case (name desc1, name desc2) of
431+ (Nothing, Nothing) ->
432+ Nothing
433+
434+ (Just name1, Nothing) ->
435+ Just name1
436+
437+ (Nothing, Just name2) ->
438+ Just name2
439+
440+ (Just name1, Just name2) ->
441+ case (flex desc1, flex desc2) of
442+ ( _ , Flexible ) -> Just name1
443+ ( Flexible , _ ) -> Just name2
444+ ( Is Number , Is _ ) -> Just name1
445+ ( Is _ , Is Number ) -> Just name2
446+ ( Is _ , Is _ ) -> Just name1
447+ ( _ , _ ) -> Nothing
448+