on master help sign in
only merge comparable types after checking all subparts
545b178Evan Czaplicki
compiler/src/Type/Unify.hs+5−8
@@ -391,13 +391,13 @@ unifyFlexSuperStructure context super flatType =
391
391
392 Comparable ->
392 Comparable ->
393 do comparableOccursCheck context
393 do comparableOccursCheck context
394− merge context (Structure flatType)
395 unifyComparableRecursive variable
394 unifyComparableRecursive variable
395+ merge context (Structure flatType)
396
396
397 CompAppend ->
397 CompAppend ->
398 do comparableOccursCheck context
398 do comparableOccursCheck context
399− merge context (Structure flatType)
400 unifyComparableRecursive variable
399 unifyComparableRecursive variable
400+ merge context (Structure flatType)
401
401
402 Tuple1 a b maybeC ->
402 Tuple1 a b maybeC ->
403 case super of
403 case super of
@@ -409,15 +409,12 @@ unifyFlexSuperStructure context super flatType =
409
409
410 Comparable ->
410 Comparable ->
411 do comparableOccursCheck context
411 do comparableOccursCheck context
412− merge context (Structure flatType)
413 unifyComparableRecursive a
412 unifyComparableRecursive a
414 unifyComparableRecursive b
413 unifyComparableRecursive b
415 case maybeC of
414 case maybeC of
416− Nothing ->
415+ Nothing -> return ()
417− return ()
418−
419− Just c ->
420− unifyComparableRecursive c
416+ Just c -> unifyComparableRecursive c
417+ merge context (Structure flatType)
421
418
422 CompAppend ->
419 CompAppend ->
423 mismatch
420 mismatch