Ensure typeVarBound constraint is produced once for each tv decl. Fix capture of type var.

Fixes typechecking tests.
Type var bounds are produced together with genDecls at program start.
Now bound of type var is captured only when needed --
inside convertsTo check, leaving typeVarBound intact.
This commit is contained in:
Grigorii Kirgizov 2020-03-11 12:26:03 +03:00
parent 991ae30ef7
commit b526afd357
1 changed files with 197 additions and 428 deletions

View File

@ -14223,31 +14223,8 @@
<node concept="a7P8L" id="5o9$c3zOx2P" role="3A8wtg">
<ref role="a7OzE" node="5o9$c3zOrUY" resolve="Inferred" />
</node>
<node concept="ns1u0" id="5o9$c3zOrUL" role="3A8w4Q">
<ref role="ns1xF" node="JOGAOsVt2f" resolve="typeVariable" />
<node concept="nsMwS" id="5o9$c3zOrUM" role="ns1xD">
<ref role="nsMwP" node="JOGAOsVt2h" resolve="declaration" />
<node concept="1nq8_$" id="5o9$c3zOrUN" role="nsMwV">
<node concept="a7P8L" id="5o9$c3zOrUO" role="1nq8_t">
<ref role="a7OzE" node="5o9$c3zOrV5" resolve="CapOrigin" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3Aq9E8" id="2XpyGaMioF4" role="3xSepj">
<node concept="3I6sU6" id="2XpyGaMioF5" role="3Ip0Jz">
<node concept="3I6s7M" id="2XpyGaMioFl" role="3I6sU7">
<node concept="3Aqt3T" id="2XpyGaMioFk" role="3I6s78">
<ref role="3AqCNq" node="2XpyGaMiopb" resolve="typeVarBound" />
<node concept="a7P8L" id="2XpyGaMioFq" role="3AunhB">
<ref role="a7OzE" node="5o9$c3zOrUY" resolve="Inferred" />
</node>
<node concept="a7P8L" id="2XpyGaMioF$" role="3AunhB">
<ref role="a7OzE" node="5o9$c3zOrV4" resolve="TVBnd" />
<node concept="a7P8L" id="4Q8MVs_77yD" role="3A8w4Q">
<ref role="a7OzE" node="2XpyGaMioAM" resolve="TypeVar" />
</node>
</node>
</node>
@ -15075,7 +15052,7 @@
</node>
</node>
<node concept="1nLNMY" id="12QmIo_7shW" role="1nK1Vg">
<property role="TrG5h" value="converts_TypeVariable_id" />
<property role="TrG5h" value="converts_typeVar_id" />
<node concept="3clFbS" id="12QmIo_7shX" role="1nLNMH">
<node concept="1nLNNL" id="12QmIo_7shY" role="3cqZAp">
<node concept="1nLNMm" id="12QmIo_7shZ" role="1nLNNK">
@ -15121,20 +15098,6 @@
</node>
</node>
</node>
<node concept="3Aq9_M" id="3yhgKRJRfQq" role="1nLNMa">
<node concept="3I6sU6" id="4nIWweBB$Yf" role="3Ip0Jz">
<node concept="3I6s7M" id="4nIWweBB$Yg" role="3I6sU7">
<node concept="3A8Hvi" id="3yhgKRJRfS2" role="3I6s78">
<node concept="a7P8L" id="3yhgKRJRfSa" role="3A8wtg">
<ref role="a7OzE" node="3yhgKRJRdBL" resolve="S" />
</node>
<node concept="a7P8L" id="3yhgKRJRfSf" role="3A8w4Q">
<ref role="a7OzE" node="3yhgKRJRdCb" resolve="T" />
</node>
</node>
</node>
</node>
</node>
<node concept="3NuqgR" id="3yhgKRJRdBK" role="0Rg$4">
<node concept="aZer4" id="3yhgKRJRdBL" role="3XD1gS">
<property role="TrG5h" value="S" />
@ -15186,6 +15149,9 @@
<node concept="aZer4" id="6p5LEuvdJWg" role="3XD1gS">
<property role="TrG5h" value="Bnd" />
</node>
<node concept="aZer4" id="1sJZ0_oZIwY" role="3XD1gS">
<property role="TrG5h" value="BndCap" />
</node>
<node concept="aZer4" id="6p5LEuvdJWh" role="3XD1gS">
<property role="TrG5h" value="To" />
</node>
@ -15194,11 +15160,22 @@
<node concept="3xSepi" id="6E2cNicdiiK" role="3xSepv">
<node concept="3Aq9E8" id="6p5LEuvdJWt" role="3xSepj">
<node concept="3I6sU6" id="6p5LEuvdJWu" role="3Ip0Jz">
<node concept="3I6s7M" id="1sJZ0_oZIwE" role="3I6sU7">
<node concept="3Aqt3T" id="2BbfRGBXXU9" role="3I6s78">
<ref role="3AqCNq" node="3wxtToEiJ2p" resolve="capture" />
<node concept="a7P8L" id="1sJZ0_oZIy9" role="3AunhB">
<ref role="a7OzE" node="1sJZ0_oZIwY" resolve="BndCap" />
</node>
<node concept="a7P8L" id="2BbfRGBXXW5" role="3AunhB">
<ref role="a7OzE" node="6p5LEuvdJWg" resolve="Bnd" />
</node>
</node>
</node>
<node concept="3I6s7M" id="6p5LEuvdJWz" role="3I6sU7">
<node concept="3Aqt3T" id="6p5LEuvdJW$" role="3I6s78">
<ref role="3AqCNq" node="3Qp4N06bUPu" resolve="convertsTo" />
<node concept="a7P8L" id="6p5LEuvdL1v" role="3AunhB">
<ref role="a7OzE" node="6p5LEuvdJWg" resolve="Bnd" />
<node concept="a7P8L" id="1sJZ0_oZIyt" role="3AunhB">
<ref role="a7OzE" node="1sJZ0_oZIwY" resolve="BndCap" />
</node>
<node concept="a7P8L" id="6p5LEuvdJWA" role="3AunhB">
<ref role="a7OzE" node="6p5LEuvdJWh" resolve="To" />
@ -20269,6 +20246,69 @@
</node>
</node>
</node>
<node concept="1nLNMY" id="1sJZ0_oUxQC" role="1nK1Vg">
<property role="TrG5h" value="typeVariable_requireDecl" />
<node concept="3clFbS" id="1sJZ0_oUxQD" role="1nLNMH">
<node concept="1mebxG" id="1sJZ0_oUI4K" role="3cqZAp">
<node concept="2OqwBi" id="1sJZ0_oUIit" role="1mebXD">
<node concept="3A2sRY" id="1sJZ0_oUI69" role="2Oq$k0">
<ref role="3A2yKK" node="1sJZ0_oU$$a" resolve="tv" />
</node>
<node concept="3TrEf2" id="1sJZ0_oUJhv" role="2OqNvi">
<ref role="3Tt5mk" to="tpee:g96sUm1" resolve="typeVariableDeclaration" />
</node>
</node>
</node>
</node>
<node concept="2t___k" id="1sJZ0_oU$$9" role="1nLNMg">
<ref role="2t_S0q" to="tpee:g96syBo" resolve="TypeVariableReference" />
<node concept="3A20r5" id="1sJZ0_oU$$a" role="2t_VXX">
<property role="TrG5h" value="tv" />
</node>
</node>
</node>
<node concept="1nLNMY" id="12QmIo_7shg" role="1nK1Vg">
<property role="TrG5h" value="upperBoundType_requireBound" />
<node concept="3clFbS" id="12QmIo_7shh" role="1nLNMH">
<node concept="1mebxG" id="12QmIo_7shm" role="3cqZAp">
<node concept="2OqwBi" id="4vBwiiV4ghA" role="1mebXD">
<node concept="3A2sRY" id="4vBwiiV4g5P" role="2Oq$k0">
<ref role="3A2yKK" node="4vBwiiV2R70" resolve="ubt" />
</node>
<node concept="3TrEf2" id="4vBwiiV4gCl" role="2OqNvi">
<ref role="3Tt5mk" to="tpee:h3qUExb" resolve="bound" />
</node>
</node>
</node>
</node>
<node concept="2t___k" id="4vBwiiV2R6Z" role="1nLNMg">
<ref role="2t_S0q" to="tpee:h3qUExa" resolve="UpperBoundType" />
<node concept="3A20r5" id="4vBwiiV2R70" role="2t_VXX">
<property role="TrG5h" value="ubt" />
</node>
</node>
</node>
<node concept="1nLNMY" id="12QmIo_7shp" role="1nK1Vg">
<property role="TrG5h" value="lowerBoundType_requireBound" />
<node concept="3clFbS" id="12QmIo_7shq" role="1nLNMH">
<node concept="1mebxG" id="12QmIo_7shv" role="3cqZAp">
<node concept="2OqwBi" id="4vBwiiV4j96" role="1mebXD">
<node concept="3A2sRY" id="4vBwiiV4iY9" role="2Oq$k0">
<ref role="3A2yKK" node="4vBwiiV2Rd9" resolve="lbt" />
</node>
<node concept="3TrEf2" id="4vBwiiV4jkQ" role="2OqNvi">
<ref role="3Tt5mk" to="tpee:h3qUv9r" resolve="bound" />
</node>
</node>
</node>
</node>
<node concept="2t___k" id="4vBwiiV2Rd8" role="1nLNMg">
<ref role="2t_S0q" to="tpee:h3qUtkX" resolve="LowerBoundType" />
<node concept="3A20r5" id="4vBwiiV2Rd9" role="2t_VXX">
<property role="TrG5h" value="lbt" />
</node>
</node>
</node>
<node concept="1nLNMY" id="2rIdnPwjZHp" role="1nK1Vg">
<property role="TrG5h" value="createRawTypes" />
<node concept="3clFbS" id="2rIdnPwjZHq" role="1nLNMH">
@ -20864,82 +20904,6 @@
</node>
</node>
</node>
<node concept="1nLNMY" id="12QmIo_7shg" role="1nK1Vg">
<property role="TrG5h" value="upperBoundType" />
<node concept="3clFbS" id="12QmIo_7shh" role="1nLNMH">
<node concept="1mebxG" id="12QmIo_7shm" role="3cqZAp">
<node concept="2OqwBi" id="4vBwiiV4ghA" role="1mebXD">
<node concept="3A2sRY" id="4vBwiiV4g5P" role="2Oq$k0">
<ref role="3A2yKK" node="4vBwiiV2R70" resolve="ubt" />
</node>
<node concept="3TrEf2" id="4vBwiiV4gCl" role="2OqNvi">
<ref role="3Tt5mk" to="tpee:h3qUExb" resolve="bound" />
</node>
</node>
</node>
<node concept="1nLNNL" id="12QmIo_7shn" role="3cqZAp">
<node concept="1nLNMm" id="12QmIo_7sho" role="1nLNNK" />
</node>
</node>
<node concept="2t___k" id="4vBwiiV2R6Z" role="1nLNMg">
<ref role="2t_S0q" to="tpee:h3qUExa" resolve="UpperBoundType" />
<node concept="3A20r5" id="4vBwiiV2R70" role="2t_VXX">
<property role="TrG5h" value="ubt" />
</node>
</node>
</node>
<node concept="1nLNMY" id="12QmIo_7shp" role="1nK1Vg">
<property role="TrG5h" value="lowerBoundType" />
<node concept="3clFbS" id="12QmIo_7shq" role="1nLNMH">
<node concept="1mebxG" id="12QmIo_7shv" role="3cqZAp">
<node concept="2OqwBi" id="4vBwiiV4j96" role="1mebXD">
<node concept="3A2sRY" id="4vBwiiV4iY9" role="2Oq$k0">
<ref role="3A2yKK" node="4vBwiiV2Rd9" resolve="lbt" />
</node>
<node concept="3TrEf2" id="4vBwiiV4jkQ" role="2OqNvi">
<ref role="3Tt5mk" to="tpee:h3qUv9r" resolve="bound" />
</node>
</node>
</node>
<node concept="1nLNNL" id="12QmIo_7shw" role="3cqZAp">
<node concept="1nLNMm" id="12QmIo_7shx" role="1nLNNK" />
</node>
</node>
<node concept="2t___k" id="4vBwiiV2Rd8" role="1nLNMg">
<ref role="2t_S0q" to="tpee:h3qUtkX" resolve="LowerBoundType" />
<node concept="3A20r5" id="4vBwiiV2Rd9" role="2t_VXX">
<property role="TrG5h" value="lbt" />
</node>
</node>
</node>
<node concept="1nLNMY" id="12QmIo_7shy" role="1nK1Vg">
<property role="TrG5h" value="wildcardType" />
<node concept="3clFbS" id="12QmIo_7shz" role="1nLNMH">
<node concept="1nLNNL" id="12QmIo_7sh$" role="3cqZAp">
<node concept="1nLNMm" id="12QmIo_7sh_" role="1nLNNK" />
</node>
</node>
<node concept="2t___k" id="4vBwiiV2R0M" role="1nLNMg">
<ref role="2t_S0q" to="tpee:h3qTviz" resolve="WildCardType" />
<node concept="3A20r5" id="4vBwiiV2R0N" role="2t_VXX">
<property role="TrG5h" value="wt" />
</node>
</node>
</node>
<node concept="1nLNMY" id="12QmIo_7shA" role="1nK1Vg">
<property role="TrG5h" value="typeVariableType" />
<node concept="3clFbS" id="12QmIo_7shB" role="1nLNMH">
<node concept="1nLNNL" id="12QmIo_7shC" role="3cqZAp">
<node concept="1nLNMm" id="12QmIo_7shD" role="1nLNNK" />
</node>
</node>
<node concept="2t___k" id="4vBwiiV2R0Z" role="1nLNMg">
<ref role="2t_S0q" to="tpee:g96syBo" resolve="TypeVariableReference" />
<node concept="3A20r5" id="4vBwiiV2R10" role="2t_VXX">
<property role="TrG5h" value="tvr" />
</node>
</node>
</node>
</node>
<node concept="AVZre" id="ohf6zGDp28">
<property role="3GE5qa" value="rule.relation" />
@ -30723,134 +30687,6 @@
</node>
</node>
</node>
<node concept="1nLNMY" id="12QmIo_7sgE" role="1nK1Vg">
<property role="TrG5h" value="capture_typeVar" />
<node concept="3clFbS" id="12QmIo_7sgF" role="1nLNMH">
<node concept="1nLNNL" id="12QmIo_7sgG" role="3cqZAp">
<node concept="1nLNMm" id="12QmIo_7sgH" role="1nLNNK">
<node concept="3Aq93q" id="5310cdpUFJY" role="1nLNMb">
<node concept="3I6sU6" id="5310cdpUFJZ" role="3Ip0Jz">
<node concept="3I6s7M" id="5310cdpUFK3" role="3I6sU7">
<node concept="3Aqt3T" id="5310cdpUFK2" role="3I6s78">
<ref role="3AqCNq" node="3wxtToEiJ2p" resolve="capture" />
<node concept="a7P8L" id="5310cdpUFKy" role="3AunhB">
<ref role="a7OzE" node="5310cdpUFKa" resolve="Captured" />
</node>
<node concept="1HFMs5" id="1mdVbTSaq3P" role="3AunhB">
<node concept="ns1u0" id="JOGAOsVtc5" role="1uarlW">
<ref role="ns1xF" node="JOGAOsVt2f" resolve="typeVariable" />
<node concept="nsMwS" id="3R6X$QWA8kb" role="ns1xD">
<ref role="nsMwP" node="JOGAOsVt2h" resolve="declaration" />
<node concept="1nq8_$" id="3R6X$QWA8QZ" role="nsMwV">
<node concept="a7P8L" id="3R6X$QWA8QX" role="1nq8_t">
<ref role="a7OzE" node="3R6X$QWA8Bh" resolve="TVDecl" />
</node>
</node>
</node>
</node>
<node concept="a7P8L" id="5310cdpUFKC" role="1uarlU">
<ref role="a7OzE" node="5310cdpUFKj" resolve="TVType" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3NuqgR" id="5310cdpUFK9" role="0Rg$4">
<node concept="aZer4" id="5310cdpUFKa" role="3XD1gS">
<property role="TrG5h" value="Captured" />
</node>
<node concept="aZer4" id="5310cdpUFKj" role="3XD1gS">
<property role="TrG5h" value="TVType" />
</node>
<node concept="aZer4" id="3R6X$QWA8Bh" role="3XD1gS">
<property role="TrG5h" value="TVDecl" />
</node>
<node concept="aZer4" id="5310cdpUFLg" role="3XD1gS">
<property role="TrG5h" value="Bnd" />
</node>
<node concept="32pEOW" id="24ciDNzxNFo" role="3vLBG7" />
</node>
<node concept="3NuqgR" id="3R6X$QVUELl" role="0Rg$4">
<node concept="aZer4" id="3R6X$QVUELm" role="3XD1gS">
<property role="TrG5h" value="CapBnd" />
</node>
<node concept="32pEOW" id="24ciDNzxNFp" role="3vLBG7" />
</node>
<node concept="3xSepi" id="6E2cNicdikB" role="3xSepv">
<node concept="3Aq9E8" id="5310cdpUFPq" role="3xSepj">
<node concept="3I6sU6" id="5310cdpUFPr" role="3Ip0Jz">
<node concept="3I6s7M" id="3R6X$QVUF13" role="3I6sU7">
<node concept="3Aqt3T" id="3R6X$QVUF11" role="3I6s78">
<ref role="3AqCNq" node="3wxtToEiJ2p" resolve="capture" />
<node concept="a7P8L" id="3R6X$QVUFcI" role="3AunhB">
<ref role="a7OzE" node="3R6X$QVUELm" resolve="CapBnd" />
</node>
<node concept="a7P8L" id="3R6X$QVUFks" role="3AunhB">
<ref role="a7OzE" node="5310cdpUFLg" resolve="Bnd" />
</node>
</node>
</node>
</node>
</node>
<node concept="3Aq9E8" id="2XpyGaMiorP" role="3xSepj">
<node concept="3I6sU6" id="2XpyGaMiorQ" role="3Ip0Jz">
<node concept="3I6s7M" id="5310cdpUFPx" role="3I6sU7">
<node concept="3A8Hvi" id="5310cdpUFPu" role="3I6s78">
<node concept="a7P8L" id="5310cdpUFPA" role="3A8wtg">
<ref role="a7OzE" node="5310cdpUFKa" />
</node>
<node concept="ns1u0" id="3R6X$QVUGlD" role="3A8w4Q">
<ref role="ns1xF" node="JOGAOsVt2f" />
<node concept="nsMwS" id="3R6X$QWA8UT" role="ns1xD">
<ref role="nsMwP" node="JOGAOsVt2h" />
<node concept="1nq8_$" id="3R6X$QWA92C" role="nsMwV">
<node concept="a7P8L" id="3R6X$QWA92A" role="1nq8_t">
<ref role="a7OzE" node="3R6X$QWA8Bh" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3Aq9E8" id="2XpyGaMiotJ" role="3xSepj">
<node concept="3I6sU6" id="2XpyGaMiotK" role="3Ip0Jz">
<node concept="3I6s7M" id="2XpyGaMiou6" role="3I6sU7">
<node concept="3Aqt3T" id="2XpyGaMiou5" role="3I6s78">
<ref role="3AqCNq" node="2XpyGaMiopb" resolve="typeVarBound" />
<node concept="a7P8L" id="2XpyGaMioub" role="3AunhB">
<ref role="a7OzE" node="5310cdpUFKa" resolve="Captured" />
</node>
<node concept="a7P8L" id="2XpyGaMioul" role="3AunhB">
<ref role="a7OzE" node="3R6X$QVUELm" resolve="CapBnd" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3Aq93q" id="2XpyGaMiopL" role="1nLNMb">
<property role="3ArMco" value="true" />
<node concept="3I6sU6" id="2XpyGaMiopM" role="3Ip0Jz">
<node concept="3I6s7M" id="2XpyGaMioqG" role="3I6sU7">
<node concept="3Aqt3T" id="2XpyGaMioqF" role="3I6s78">
<ref role="3AqCNq" node="2XpyGaMiopb" resolve="typeVarBound" />
<node concept="a7P8L" id="2XpyGaMioqL" role="3AunhB">
<ref role="a7OzE" node="5310cdpUFKj" resolve="TVType" />
</node>
<node concept="a7P8L" id="2XpyGaMioqV" role="3AunhB">
<ref role="a7OzE" node="5310cdpUFLg" resolve="Bnd" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="1nLNMY" id="1Py6iKHuxw" role="1nK1Vg">
<property role="TrG5h" value="capture_primitive" />
<node concept="3clFbS" id="1Py6iKHuxx" role="1nLNMH">
@ -32346,15 +32182,6 @@
</node>
</node>
</node>
<node concept="3AqmO8" id="2XpyGaMiopb" role="8PkJo">
<property role="TrG5h" value="typeVarBound" />
<node concept="1zAUYm" id="2XpyGaMiopi" role="1zAUyy">
<property role="TrG5h" value="var" />
</node>
<node concept="1zAUYm" id="2XpyGaMiopk" role="1zAUyy">
<property role="TrG5h" value="bnd" />
</node>
</node>
</node>
<node concept="AVZre" id="34$A1Mf51rY">
<property role="TrG5h" value="TypeOf" />
@ -35481,14 +35308,14 @@
<property role="3oM_SC" value="with" />
</node>
<node concept="3oM_SD" id="1GnJ2SU0Xu5" role="1PaTwD">
<property role="3oM_SC" value="wildcards" />
<property role="3oM_SC" value="wildcard" />
</node>
</node>
</node>
<node concept="3Aqczg" id="1GnJ2SU0X8O" role="3cqZAp">
<node concept="3A8Hvi" id="1GnJ2SU0X8P" role="3Aqpz8">
<node concept="a7P8L" id="1GnJ2SU0X8Q" role="3A8wtg">
<ref role="a7OzE" node="4btN1w5LPR0" resolve="TVType" />
<node concept="37jhX" id="4Q8MVs_75PV" role="3A8wtg">
<node concept="3txIi4" id="4Q8MVs_75PT" role="37jj2" />
</node>
<node concept="ns1u0" id="1GnJ2SU0X8R" role="3A8w4Q">
<ref role="ns1xF" node="JOGAOsVt2f" resolve="typeVariable" />
@ -35503,27 +35330,6 @@
</node>
</node>
</node>
<node concept="3Aqczg" id="2XpyGaMip26" role="3cqZAp">
<node concept="3Aqt3T" id="2XpyGaMip2z" role="3Aqpz8">
<ref role="3AqCNq" node="2XpyGaMiopb" resolve="typeVarBound" />
<node concept="a7P8L" id="2XpyGaMip2C" role="3AunhB">
<ref role="a7OzE" node="4btN1w5LPR0" resolve="TVType" />
</node>
<node concept="a7P8L" id="2XpyGaMip2M" role="3AunhB">
<ref role="a7OzE" node="4btN1w5KJlE" resolve="Bound" />
</node>
</node>
</node>
<node concept="3Aqczg" id="1GnJ2SU0X8Z" role="3cqZAp">
<node concept="3A8Hvi" id="1GnJ2SU0X90" role="3Aqpz8">
<node concept="37jhX" id="5HLeEcf2UrV" role="3A8wtg">
<node concept="3txIi4" id="1GnJ2SU0X92" role="37jj2" />
</node>
<node concept="a7P8L" id="1GnJ2SU0X93" role="3A8w4Q">
<ref role="a7OzE" node="4btN1w5LPR0" resolve="TVType" />
</node>
</node>
</node>
<node concept="3clFbH" id="1GnJ2SU0Wia" role="3cqZAp" />
</node>
<node concept="3clFbC" id="1GnJ2SU0X27" role="3clFbw">
@ -35673,136 +35479,10 @@
</node>
<node concept="9aQIb" id="4btN1w5KF4W" role="9aQIa">
<node concept="3clFbS" id="4btN1w5KF4X" role="9aQI4">
<node concept="3SKdUt" id="4btN1w5LLQu" role="3cqZAp">
<node concept="1PaTwC" id="4btN1w5LMig" role="3ndbpf">
<node concept="3oM_SD" id="4btN1w5LLQx" role="1PaTwD">
<property role="3oM_SC" value="handle" />
</node>
<node concept="3oM_SD" id="4btN1w5LLUD" role="1PaTwD">
<property role="3oM_SC" value="recursion" />
</node>
<node concept="3oM_SD" id="4btN1w5LLYv" role="1PaTwD">
<property role="3oM_SC" value="be" />
</node>
<node concept="3oM_SD" id="4btN1w5LLYz" role="1PaTwD">
<property role="3oM_SC" value="declaring" />
</node>
<node concept="3oM_SD" id="4btN1w5LM2r" role="1PaTwD">
<property role="3oM_SC" value="special" />
</node>
<node concept="3oM_SD" id="4btN1w5LM6k" role="1PaTwD">
<property role="3oM_SC" value="singleton" />
</node>
<node concept="3oM_SD" id="4btN1w5LMae" role="1PaTwD">
<property role="3oM_SC" value="type" />
</node>
<node concept="3oM_SD" id="4btN1w5LMe9" role="1PaTwD">
<property role="3oM_SC" value="var" />
</node>
<node concept="3oM_SD" id="4btN1w5LNsu" role="1PaTwD">
<property role="3oM_SC" value="subst" />
</node>
</node>
</node>
<node concept="3clFbF" id="4btN1w5LObc" role="3cqZAp">
<node concept="37vLTI" id="4btN1w5LOhu" role="3clFbG">
<node concept="37vLTw" id="4btN1w5LOba" role="37vLTJ">
<ref role="3cqZAo" node="4btN1w5KuNQ" resolve="subs" />
</node>
<node concept="2ShNRf" id="4btN1w5LNeV" role="37vLTx">
<node concept="1pGfFk" id="4btN1w5LNeW" role="2ShVmc">
<ref role="37wK5l" node="6EY0p2wuspr" resolve="TypeVarSubstitution" />
<node concept="37vLTw" id="4btN1w5LNeX" role="37wK5m">
<ref role="3cqZAo" node="4btN1w5KuNQ" resolve="subs" />
</node>
<node concept="2ShNRf" id="4btN1w5LNeY" role="37wK5m">
<node concept="2HTt$P" id="4btN1w5LNeZ" role="2ShVmc">
<node concept="3Tqbb2" id="3ca5Bh2OS06" role="2HTBi0">
<ref role="ehGHo" to="tpee:g96euPO" resolve="TypeVariableDeclaration" />
</node>
<node concept="3tDTZT" id="4btN1w5LNf2" role="2HTEbv">
<ref role="3tDTNw" node="4btN1w5KevB" resolve="tvd" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3clFbF" id="4btN1w5LOLL" role="3cqZAp">
<node concept="2OqwBi" id="4btN1w5LORk" role="3clFbG">
<node concept="37vLTw" id="4btN1w5LOLJ" role="2Oq$k0">
<ref role="3cqZAo" node="4btN1w5KuNQ" resolve="subs" />
</node>
<node concept="liA8E" id="4btN1w5LP1j" role="2OqNvi">
<ref role="37wK5l" node="6EY0p2w8YaM" resolve="substitute" />
<node concept="3tDTZT" id="4btN1w5LPgb" role="37wK5m">
<ref role="3tDTNw" node="4btN1w5KevB" resolve="tvd" />
</node>
<node concept="3IkZw_" id="hYA4REfKsY" role="37wK5m">
<node concept="a7P8L" id="4btN1w5LQ4c" role="3Ikct_">
<ref role="a7OzE" node="4btN1w5LPR0" resolve="TVType" />
</node>
</node>
</node>
</node>
</node>
<node concept="3SKdUt" id="5mvKPwwq9Sk" role="3cqZAp">
<node concept="1PaTwC" id="5mvKPwwq9Sl" role="3ndbpf">
<node concept="3oM_SD" id="5mvKPwwq9Sn" role="1PaTwD">
<property role="3oM_SC" value="get" />
</node>
<node concept="3oM_SD" id="5mvKPwwq9Ux" role="1PaTwD">
<property role="3oM_SC" value="bound" />
</node>
<node concept="3oM_SD" id="5mvKPwwq9Yn" role="1PaTwD">
<property role="3oM_SC" value="from" />
</node>
<node concept="3oM_SD" id="5mvKPwwq9Yr" role="1PaTwD">
<property role="3oM_SC" value="declaration" />
</node>
</node>
</node>
<node concept="1$59iH" id="4btN1w5LNeU" role="3cqZAp">
<ref role="1$58ik" node="6hqFpWmN1Sp" resolve="substitution" />
<node concept="3clFbS" id="4btN1w5LNf4" role="1$59iG">
<node concept="3Aqczg" id="4btN1w5KIvy" role="3cqZAp">
<node concept="1imXTs" id="4btN1w5KIvs" role="3Aqpz8">
<node concept="a7P8L" id="4btN1w5KIzE" role="1imXu6">
<ref role="a7OzE" node="4btN1w5KHFy" resolve="TVDecl" />
</node>
<node concept="3tDTZT" id="4btN1w5KIFl" role="1imXSf">
<ref role="3tDTNw" node="4btN1w5KevB" resolve="tvd" />
</node>
</node>
</node>
<node concept="3Aqczg" id="4btN1w5LQz_" role="3cqZAp">
<node concept="3A8Hvi" id="4btN1w5LQzv" role="3Aqpz8">
<node concept="a7P8L" id="4btN1w5LQCE" role="3A8wtg">
<ref role="a7OzE" node="4btN1w5KHFy" resolve="TVDecl" />
</node>
<node concept="ns1u0" id="4btN1w5LQS0" role="3A8w4Q">
<ref role="ns1xF" node="4btN1w5JLyI" resolve="typeVariableDecl" />
<node concept="nsMwS" id="4btN1w5LQVW" role="ns1xD">
<ref role="nsMwP" node="4btN1w5JM28" resolve="bound" />
<node concept="1nq8_$" id="4btN1w5LR3C" role="nsMwV">
<node concept="a7P8L" id="4btN1w5LR3A" role="1nq8_t">
<ref role="a7OzE" node="4btN1w5KJlE" resolve="Bound" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="37vLTw" id="4btN1w5LOHS" role="1$59jn">
<ref role="3cqZAo" node="4btN1w5KuNQ" resolve="subs" />
</node>
</node>
<node concept="3Aqczg" id="4btN1w5LRxv" role="3cqZAp">
<node concept="3A8Hvi" id="4btN1w5LRxp" role="3Aqpz8">
<node concept="a7P8L" id="4btN1w5LS9L" role="3A8wtg">
<ref role="a7OzE" node="4btN1w5LPR0" resolve="TVType" />
<node concept="37jhX" id="4Q8MVs_768Z" role="3A8wtg">
<node concept="3txIi4" id="4Q8MVs_768X" role="37jj2" />
</node>
<node concept="ns1u0" id="4btN1w5KFEA" role="3A8w4Q">
<ref role="ns1xF" node="JOGAOsVt2f" resolve="typeVariable" />
@ -35818,27 +35498,6 @@
</node>
</node>
</node>
<node concept="3Aqczg" id="2XpyGaMip60" role="3cqZAp">
<node concept="3Aqt3T" id="2XpyGaMip8B" role="3Aqpz8">
<ref role="3AqCNq" node="2XpyGaMiopb" resolve="typeVarBound" />
<node concept="a7P8L" id="2XpyGaMip8G" role="3AunhB">
<ref role="a7OzE" node="4btN1w5LPR0" resolve="TVType" />
</node>
<node concept="a7P8L" id="2XpyGaMip8Q" role="3AunhB">
<ref role="a7OzE" node="4btN1w5KJlE" resolve="Bound" />
</node>
</node>
</node>
<node concept="3Aqczg" id="4btN1w5KFr9" role="3cqZAp">
<node concept="3A8Hvi" id="4btN1w5KFr6" role="3Aqpz8">
<node concept="37jhX" id="5HLeEcf2UrZ" role="3A8wtg">
<node concept="3txIi4" id="4btN1w5KFyU" role="37jj2" />
</node>
<node concept="a7P8L" id="4btN1w5LSLI" role="3A8w4Q">
<ref role="a7OzE" node="4btN1w5LPR0" resolve="TVType" />
</node>
</node>
</node>
</node>
</node>
</node>
@ -43517,6 +43176,116 @@
<property role="TrG5h" value="typeScheme" />
</node>
</node>
<node concept="3AqmO8" id="2XpyGaMiopb" role="8PkJo">
<property role="TrG5h" value="typeVarBound" />
<node concept="1zAUYm" id="2XpyGaMiopi" role="1zAUyy">
<property role="TrG5h" value="var" />
</node>
<node concept="1zAUYm" id="2XpyGaMiopk" role="1zAUyy">
<property role="TrG5h" value="bnd" />
</node>
</node>
<node concept="1nLNMY" id="1sJZ0_oQtQ2" role="1nK1Vg">
<property role="TrG5h" value="typeVarDecl" />
<node concept="3clFbS" id="1sJZ0_oQtQ3" role="1nLNMH">
<node concept="1nLNNL" id="1sJZ0_oQvNn" role="3cqZAp">
<node concept="1nLNMm" id="1sJZ0_oQvNp" role="1nLNNK">
<node concept="3Aq93q" id="1sJZ0_oQw11" role="1nLNMb">
<property role="3ArMco" value="true" />
<node concept="3I6sU6" id="1sJZ0_oQw12" role="3Ip0Jz">
<node concept="3I6s7M" id="1sJZ0_oQw2m" role="3I6sU7">
<node concept="3Aqt3T" id="1sJZ0_oQw2l" role="3I6s78">
<ref role="3AqCNq" node="4btN1w5Ki4T" resolve="checkGenerics" />
</node>
</node>
</node>
</node>
<node concept="3NuqgR" id="1sJZ0_oQvOI" role="0Rg$4">
<node concept="aZer4" id="1sJZ0_oQw6m" role="3XD1gS">
<property role="TrG5h" value="TVDecl" />
</node>
<node concept="aZer4" id="1sJZ0_oQvOJ" role="3XD1gS">
<property role="TrG5h" value="Bound" />
</node>
<node concept="aZer4" id="1sJZ0_oQvVs" role="3XD1gS">
<property role="TrG5h" value="TVar" />
</node>
<node concept="32pEOW" id="1sJZ0_oQvQb" role="3vLBG7" />
</node>
<node concept="3xSepi" id="1sJZ0_oQw3D" role="3xSepv">
<node concept="3Aq9E8" id="1sJZ0_oQw3E" role="3xSepj">
<node concept="3I6sU6" id="1sJZ0_oQw3F" role="3Ip0Jz">
<node concept="3IrJb3" id="1sJZ0_oQAsu" role="3I6sU7">
<node concept="3clFbS" id="1sJZ0_oQAsv" role="3IrJb0">
<node concept="3Aqczg" id="1sJZ0_oQAsw" role="3cqZAp">
<node concept="B_ONY" id="1sJZ0_oQw4Z" role="3Aqpz8">
<ref role="17QRF" node="4btN1w5KzU5" resolve="typeVariableDecl" />
<node concept="a7P8L" id="1sJZ0_oQwbS" role="B_OMz">
<ref role="a7OzE" node="1sJZ0_oQw6m" resolve="TVDecl" />
</node>
<node concept="1Q7qz5" id="1sJZ0_oQwev" role="150vd">
<node concept="1Q7q5z" id="1sJZ0_oQwfL" role="1Q7qz4">
<ref role="1Q7tcy" node="4btN1w5L$Ht" resolve="tvd" />
<node concept="3A2sRY" id="1sJZ0_oQwh5" role="1KxKwY">
<ref role="3A2yKK" node="1sJZ0_oQvI7" resolve="tvd" />
</node>
</node>
</node>
</node>
</node>
<node concept="3Aqczg" id="1sJZ0_oQAsx" role="3cqZAp">
<node concept="3A8Hvi" id="1sJZ0_oQwmD" role="3Aqpz8">
<node concept="ns1u0" id="1sJZ0_oQwou" role="3A8w4Q">
<ref role="ns1xF" node="4btN1w5JLyI" resolve="typeVariableDecl" />
<node concept="nsMwS" id="1sJZ0_oQwpK" role="ns1xD">
<ref role="nsMwP" node="4btN1w5JM28" resolve="bound" />
<node concept="1nq8_$" id="1sJZ0_oQwsl" role="nsMwV">
<node concept="a7P8L" id="1sJZ0_oQwsk" role="1nq8_t">
<ref role="a7OzE" node="1sJZ0_oQvOJ" resolve="Bound" />
</node>
</node>
</node>
</node>
<node concept="a7P8L" id="1sJZ0_oQwjM" role="3A8wtg">
<ref role="a7OzE" node="1sJZ0_oQw6m" resolve="TVDecl" />
</node>
</node>
</node>
<node concept="3Aqczg" id="1sJZ0_oQAsy" role="3cqZAp">
<node concept="3Aqt3T" id="1sJZ0_oQwvh" role="3Aqpz8">
<ref role="3AqCNq" node="2XpyGaMiopb" resolve="typeVarBound" />
<node concept="ns1u0" id="1sJZ0_oQwy5" role="3AunhB">
<ref role="ns1xF" node="JOGAOsVt2f" resolve="typeVariable" />
<node concept="nsMwS" id="1sJZ0_oQwzn" role="ns1xD">
<ref role="nsMwP" node="JOGAOsVt2h" resolve="declaration" />
<node concept="2OqwBi" id="1sJZ0_oQwKl" role="nsMwV">
<node concept="3A2sRY" id="1sJZ0_oQw_V" role="2Oq$k0">
<ref role="3A2yKK" node="1sJZ0_oQvI7" resolve="tvd" />
</node>
<node concept="iZEcu" id="1sJZ0_oQwVq" role="2OqNvi" />
</node>
</node>
</node>
<node concept="a7P8L" id="1sJZ0_oQAno" role="3AunhB">
<ref role="a7OzE" node="1sJZ0_oQvOJ" resolve="Bound" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="2t___k" id="1sJZ0_oQvI6" role="1nLNMg">
<ref role="2t_S0q" to="tpee:g96euPO" resolve="TypeVariableDeclaration" />
<node concept="3A20r5" id="1sJZ0_oQvI7" role="2t_VXX">
<property role="TrG5h" value="tvd" />
</node>
</node>
</node>
<node concept="1nLNMY" id="4btN1w5JqOL" role="1nK1Vg">
<property role="TrG5h" value="genericDeclarations" />
<node concept="3clFbS" id="4btN1w5JqOM" role="1nLNMH">