@@ -778,7 +778,7 @@ and SolveTypEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace
778778
779779match sty1, sty2with
780780// type vars inside forall-types may be alpha-equivalent
781- | TType_ var tp1, TType_ var tp2when typarEq tp1 tp2|| ( aenv.EquivTypars.ContainsKey tp1&& typeEquiv gaenv.EquivTypars .[ tp1 ] ty2) -> CompleteD
781+ | TType_ var tp1, TType_ var tp2when typarEq tp1 tp2|| ( match aenv.EquivTypars.TryFind tp1with | Some v when typeEquiv gv ty2-> true | _ -> false ) -> CompleteD
782782
783783| TType_ var tp1, TType_ var tp2when PreferUnifyTypar tp1 tp2-> SolveTyparEqualsTyp csenv ndeep m2 trace sty1 ty2
784784| TType_ var tp1, TType_ var tp2when not csenv.MatchingOnly&& PreferUnifyTypar tp2 tp1-> SolveTyparEqualsTyp csenv ndeep m2 trace sty2 ty1
@@ -850,12 +850,17 @@ and SolveTypSubsumesTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTra
850850let aenv = csenv.EquivEnv
851851let denv = csenv.DisplayEnv
852852match sty1, sty2with
853- | TType_ var tp1, _ when aenv.EquivTypars.ContainsKey tp1->
854- SolveTypSubsumesTyp csenv ndeep m2 trace cxsln aenv.EquivTypars.[ tp1] ty2
855-
856- | TType_ var r1, TType_ var r2when typarEq r1 r2-> CompleteD
853+ | TType_ var tp1, _ ->
854+ match aenv.EquivTypars.TryFind tp1with
855+ | Some v-> SolveTypSubsumesTyp csenv ndeep m2 trace cxsln v ty2
856+ | _ ->
857+ match sty2with
858+ | TType_ var r2when typarEq tp1 r2-> CompleteD
859+ | TType_ var rwhen not csenv.MatchingOnly-> SolveTyparSubtypeOfType csenv ndeep m2 trace r ty1
860+ | _ -> SolveTypEqualsTypKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln ty1 ty2
861+
857862| _, TType_ var rwhen not csenv.MatchingOnly-> SolveTyparSubtypeOfType csenv ndeep m2 trace r ty1
858- | TType _ var _ , _ -> SolveTypEqualsTypKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln ty1 ty2
863+
859864| TType_ tuple( tupInfo1, l1) , TType_ tuple( tupInfo2, l2) ->
860865if evalTupInfoIsStruct tupInfo1<> evalTupInfoIsStruct tupInfo2then ErrorD( ConstraintSolverError( FSComp.SR.tcTupleStructMismatch(), csenv.m, m2)) else
861866 SolveTypEqualsTypEqns csenv ndeep m2 trace cxsln l1 l2(* nb. can unify since no variance*)