on master help sign in
Get rid of try2 and try3 ideas in unification
97841f7Evan Czaplicki
compiler/src/Type/Unify.hs+16−39
@@ -117,22 +117,6 @@ mismatch =
117 err vars ()
117 err vars ()
118
118
119
119
120−try2 :: Unify () -> Unify () -> Unify ()
121−try2 (Unify k1) (Unify k2) =
122− Unify $ \vars ok err ->
123− let
124− ok1 vars1 () = k2 vars1 ok err
125− err1 vars1 () = k2 vars1 err err
126− in
127− k1 vars ok1 err1
128−
129−
130−{-# INLINE try3 #-}
131−try3 :: Unify () -> Unify () -> Unify () -> Unify ()
132−try3 u1 u2 u3 =
133− try2 u1 (try2 u2 u3)
134−
135−
136
120
137-- UNIFICATION HELPERS
121-- UNIFICATION HELPERS
138
122
@@ -555,9 +539,8 @@ unifyStructure context flatType content otherContent =
555 unifyArgs vars context args otherArgs ok1 err
539 unifyArgs vars context args otherArgs ok1 err
556
540
557 (Fun1 arg1 res1, Fun1 arg2 res2) ->
541 (Fun1 arg1 res1, Fun1 arg2 res2) ->
558− do try2
559− (subUnify arg1 arg2)
542+ do subUnify arg1 arg2
560− (subUnify res1 res2)
543+ subUnify res1 res2
561 merge context otherContent
544 merge context otherContent
562
545
563 (EmptyRecord1, EmptyRecord1) ->
546 (EmptyRecord1, EmptyRecord1) ->
@@ -578,16 +561,14 @@ unifyStructure context flatType content otherContent =
578 k vars ok err
561 k vars ok err
579
562
580 (Tuple1 a b Nothing, Tuple1 x y Nothing) ->
563 (Tuple1 a b Nothing, Tuple1 x y Nothing) ->
581− do try2
582− (subUnify a x)
564+ do subUnify a x
583− (subUnify b y)
565+ subUnify b y
584 merge context otherContent
566 merge context otherContent
585
567
586 (Tuple1 a b (Just c), Tuple1 x y (Just z)) ->
568 (Tuple1 a b (Just c), Tuple1 x y (Just z)) ->
587− do try3
588− (subUnify a x)
569+ do subUnify a x
589− (subUnify b y)
570+ subUnify b y
590− (subUnify c z)
571+ subUnify c z
591 merge context otherContent
572 merge context otherContent
592
573
593 (Unit1, Unit1) ->
574 (Unit1, Unit1) ->
@@ -642,33 +623,29 @@ unifyRecord context (RecordStructure fields1 ext1) (RecordStructure fields2 ext2
642 if Map.null uniqueFields1 then
623 if Map.null uniqueFields1 then
643
624
644 if Map.null uniqueFields2 then
625 if Map.null uniqueFields2 then
645− try2
646− (subUnify ext1 ext2)
626+ do subUnify ext1 ext2
647− (unifySharedFields context sharedFields Map.empty ext1)
627+ unifySharedFields context sharedFields Map.empty ext1
648
628
649 else
629 else
650 do subRecord <- fresh context (Structure (Record1 uniqueFields2 ext2))
630 do subRecord <- fresh context (Structure (Record1 uniqueFields2 ext2))
651− try2
652− (subUnify ext1 subRecord)
631+ subUnify ext1 subRecord
653− (unifySharedFields context sharedFields Map.empty subRecord)
632+ unifySharedFields context sharedFields Map.empty subRecord
654
633
655 else
634 else
656
635
657 if Map.null uniqueFields2 then
636 if Map.null uniqueFields2 then
658 do subRecord <- fresh context (Structure (Record1 uniqueFields1 ext1))
637 do subRecord <- fresh context (Structure (Record1 uniqueFields1 ext1))
659− try2
660− (subUnify subRecord ext2)
638+ subUnify subRecord ext2
661− (unifySharedFields context sharedFields Map.empty subRecord)
639+ unifySharedFields context sharedFields Map.empty subRecord
662
640
663 else
641 else
664 do let otherFields = Map.union uniqueFields1 uniqueFields2
642 do let otherFields = Map.union uniqueFields1 uniqueFields2
665 ext <- fresh context Type.unnamedFlexVar
643 ext <- fresh context Type.unnamedFlexVar
666 sub1 <- fresh context (Structure (Record1 uniqueFields1 ext))
644 sub1 <- fresh context (Structure (Record1 uniqueFields1 ext))
667 sub2 <- fresh context (Structure (Record1 uniqueFields2 ext))
645 sub2 <- fresh context (Structure (Record1 uniqueFields2 ext))
668− try3
669− (subUnify ext1 sub2)
646+ subUnify ext1 sub2
670− (subUnify sub1 ext2)
647+ subUnify sub1 ext2
671− (unifySharedFields context sharedFields otherFields ext)
648+ unifySharedFields context sharedFields otherFields ext
672
649
673
650
674unifySharedFields :: Context -> Map.Map N.Name (Variable, Variable) -> Map.Map N.Name Variable -> Variable -> Unify ()
651unifySharedFields :: Context -> Map.Map N.Name (Variable, Variable) -> Map.Map N.Name Variable -> Variable -> Unify ()