{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":603410915,"defaultBranch":"main","name":"dotty","ownerLogin":"EugeneFlesselle","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2023-02-18T12:33:02.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/43113539?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1712400702.0","currentOid":""},"activityList":{"items":[{"before":"c2030ea476cc6cf4d25a351f25a72c73edcc2649","after":"1dc5b995cfb84dd3e2673041d6e954ed6043900e","ref":"refs/heads/match-alias","pushedAt":"2024-04-08T18:23:38.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Cache underlyingMatchType for AppliedTypes\n\n`def underlyingMatchType` had an `isMatchAlias` guard for `AppliedType`s.\nThis used to be a quick check preventing unnecessary recursions and superType computations.\n\nBut `isMatchAlias` is now itself mutually recursive with `underlyingMatchType`,\nso we cache it for AppliedTypes to alleviate this.","shortMessageHtmlLink":"Cache underlyingMatchType for AppliedTypes"}},{"before":"2beb67e908941ff71aafce163c3c0df766cb1622","after":null,"ref":"refs/heads/MatchTypeNoCases-NoType","pushedAt":"2024-04-06T10:51:42.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"}},{"before":"fa3c735171224c249c76c9a7469d5333a12bbca0","after":null,"ref":"refs/heads/MatchTypeNoCases-ErrorType","pushedAt":"2024-04-06T10:51:42.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"}},{"before":"be4065ea9c57c043ec2fd776ad324f45e6f300aa","after":null,"ref":"refs/heads/MatchTypeNoCases","pushedAt":"2024-04-06T10:51:41.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"}},{"before":"ecbb62019eb968fcb3ecb2951efb85da8005a325","after":null,"ref":"refs/heads/MatchType-noCases-or-emptyScrut-TypeError","pushedAt":"2024-04-06T10:51:40.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"}},{"before":"263119aa378980fbd405d3eabaaffa53ceab7231","after":"c2030ea476cc6cf4d25a351f25a72c73edcc2649","ref":"refs/heads/match-alias","pushedAt":"2024-03-31T17:15:38.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Replace usages of `MatchType.InDisguise` by `underlyingMatchType`","shortMessageHtmlLink":"Replace usages of MatchType.InDisguise by underlyingMatchType"}},{"before":null,"after":"6665dcf1c2c13d0a4887e550b3f837044b8948d7","ref":"refs/heads/issues/i19326","pushedAt":"2024-03-27T12:50:48.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Keep opaques in match type scrutinee\n\nFixes #19326","shortMessageHtmlLink":"Keep opaques in match type scrutinee"}},{"before":null,"after":"104ee6267161661fc3990e95839baeac669598a4","ref":"refs/heads/issues/i19706","pushedAt":"2024-03-27T11:18:57.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Always use baseType when constraining patternTp with scrutineeTp\n\nIn the following example:\n```\ntype Cond[B <: Boolean] <: Tuple2[String, String] = B match ...\ntype Decoded[B <: Boolean] = Cond[B] match\n case (h1, _) => Int\n```\nWhen constraining the `(h1, _)` pattern with `Cond[B]`,\nwe incorrectly assumed we could constrain h1 with B,\nbecause `Cond[B]` is an applied type of which the baseType is Tuple2.\n\nThe issue can be fixed in constrainSimplePatternType\nby obtaining the baseType for both the patternTp and scrutineeTp,\nwith the most general base of the two.\n\nSo in the above example, we wound constrain `B` with String\nby obtaining `(String, String)` from `Cond[B]`.","shortMessageHtmlLink":"Always use baseType when constraining patternTp with scrutineeTp"}},{"before":"3d7a77aa329004cf9459af383cb98122929d3b3b","after":"2beb67e908941ff71aafce163c3c0df766cb1622","ref":"refs/heads/MatchTypeNoCases-NoType","pushedAt":"2024-03-26T12:23:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Do match type reduction atPhaseNoLater than ElimOpaque\n\nIf a match type pattern is an opaque type, we use its bounds when checking the validity of the pattern.\nFollowing the ElimOpaque phase however, the pattern is beta-reduced (as normal applied type aliases), which may result in an illegal pattern.","shortMessageHtmlLink":"Do match type reduction atPhaseNoLater than ElimOpaque"}},{"before":"2a86c9e85dfbcce93e8acab004d1c505a7672965","after":"263119aa378980fbd405d3eabaaffa53ceab7231","ref":"refs/heads/match-alias","pushedAt":"2024-03-25T17:52:22.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Replace usages of `MatchType.InDisguise` by `underlyingMatchType`","shortMessageHtmlLink":"Replace usages of MatchType.InDisguise by underlyingMatchType"}},{"before":"8fb447c6cdb5c46f308e410f784582119975d3c2","after":"3d7a77aa329004cf9459af383cb98122929d3b3b","ref":"refs/heads/MatchTypeNoCases-NoType","pushedAt":"2024-03-25T17:33:49.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Remove bad-footprint.scala\n\nThis is another case which used to result in an unreported `ErrorType`\nIt is now detected only when enabling `-Yforce-sbt-phases -Xverify-signatures -Ycheck:all`\n\nThe error comes from:\n```scala\ntype Names[X <: AnyNamedTuple] <: Tuple = X match\n case NamedTuple[n, _] => n\n```\nThe `NamedTuple` pattern is legal as long as the type alias is opaque.\nFollowing elimOpaque however, it is beta-reduced (as normal applied type aliases in match type patterns)\nto a pattern which no longer contains an instance of the type capture `n`, making it an illegal pattern.\nThis used to return an `ErrorType`, which happened not be reported as in the other cases.\n\nAlso note this error could also be missed without the New footprint calculation scheme (#19639)\n\nGiven the changes to the footprint calculation and failed reduction reporting,\nthis is now the same issue as #19434.","shortMessageHtmlLink":"Remove bad-footprint.scala"}},{"before":"b665f4537b07d10c6484068a3db51912f724a78c","after":"8fb447c6cdb5c46f308e410f784582119975d3c2","ref":"refs/heads/MatchTypeNoCases-NoType","pushedAt":"2024-03-20T20:49:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Update check-files and error annotations\n\nThe diff in neg/10349.scala is quite interesting.\nWith a few intermediate values:\n```scala\ntype First[X] = X match\n case Map[_, v] => First[Option[v]]\n\ndef first[X](x: X): First[X] = x match\n case x: Map[k, v] =>\n val hdOpt: Option[v] = x.values.headOption\n first(hdOpt): First[Option[v]] // error only before changes\n```\nThis now type-checks but will fail at runtime because of the in-exhaustivity of the match expression.\nPerhaps we should add some additional condition in `isMatchTypeShaped` to account for this, or at least emit a warning ?","shortMessageHtmlLink":"Update check-files and error annotations"}},{"before":"646fea89c98139f9419bd2b833c81ff823680de9","after":"b665f4537b07d10c6484068a3db51912f724a78c","ref":"refs/heads/MatchTypeNoCases-NoType","pushedAt":"2024-03-20T14:16:20.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Only record in MatchTypeTrace if not previously attempted\n\n`recurseWith` can be called with the same scrutinee (even if match type reduction is cached) if it is an applied match alias\n\nFor example, `Tuple.Head[Tuple.Tail[T]]` will attempt to reduce `Tuple.Tail[T]` twice:\n- once as an argument of the match alias `Head`, and\n- once as a scrutinee in body of `Head` (after the substitution).","shortMessageHtmlLink":"Only record in MatchTypeTrace if not previously attempted"}},{"before":null,"after":"ecbb62019eb968fcb3ecb2951efb85da8005a325","ref":"refs/heads/MatchType-noCases-or-emptyScrut-TypeError","pushedAt":"2024-03-17T19:35:24.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Update check-files and error annotations\n\nThe comment in 8778.scala:21 was outdated\n`Test.M[Inv[Int & String]]` did not reduce to `String` but was left unreduced\n\nSo getting an error now is consistent with that\nBut one should probably investigate why we find `Inv[Int & String]` is uninhabited whereas `Inv[Nothing]` is fine","shortMessageHtmlLink":"Update check-files and error annotations"}},{"before":"8a327410598052ae84b195133acf9557efe7a2e9","after":"be4065ea9c57c043ec2fd776ad324f45e6f300aa","ref":"refs/heads/MatchTypeNoCases","pushedAt":"2024-03-17T08:54:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Only throw TypeErrors for match types with no cases if ctx.isTyper","shortMessageHtmlLink":"Only throw TypeErrors for match types with no cases if ctx.isTyper"}},{"before":"736630da0aaa40f69023c016f0d6a4c472cd44a1","after":"646fea89c98139f9419bd2b833c81ff823680de9","ref":"refs/heads/MatchTypeNoCases-NoType","pushedAt":"2024-03-16T17:42:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Update check-files and error annotations\n\nThe diff in neg/10349.scala is quite interesting.\nWith a few intermediate values:\n```scala\ntype First[X] = X match\n case Map[_, v] => First[Option[v]]\n\ndef first[X](x: X): First[X] = x match\n case x: Map[k, v] =>\n val hdOpt: Option[v] = x.values.headOption\n first(hdOpt): First[Option[v]] // error only before changes\n```\nThis now type-checks but will fail at runtime because of the in-exhaustivity of the match expression.\nPerhaps we should add some additional condition in `isMatchTypeShaped` to account for this, or at least emit a warning ?","shortMessageHtmlLink":"Update check-files and error annotations"}},{"before":null,"after":"fa3c735171224c249c76c9a7469d5333a12bbca0","ref":"refs/heads/MatchTypeNoCases-ErrorType","pushedAt":"2024-03-16T16:44:13.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Remove i18211.scala\n\nPrior to the changes contained, subtyping trace contained:\n```\n <== isSubType scala.compiletime.ops.int.S[a]\n(this error can be ignored for now with `-source:3.3`)> <:< Nothing = true\n <== isSubType IndexOf[String,\n Tuple.Drop[(String, Int, String, Boolean),\n scala.compiletime.ops.int.S[IndexOf[String, (String, Int, String, Boolean)]]\n ]\n] <:< Nothing = true\n```","shortMessageHtmlLink":"Remove i18211.scala"}},{"before":null,"after":"736630da0aaa40f69023c016f0d6a4c472cd44a1","ref":"refs/heads/MatchTypeNoCases-NoType","pushedAt":"2024-03-15T15:19:04.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Make match types with no matching cases not an error\n\nModify the MatchReducer to return NoType in the case no matches, rather than throwing an MatchTypeReductionError.\nThis makes it consistent with the other match type reduction failures, where being stuck does not result in an error, but simply in an unreduced match type.\n\nWe still get the explanations of the underlying error in the MatchTypeTrace, but in positions which need the reduction for conformance, rather than at application site of the match type.\n\nThe diff in neg/10349.scala is quite interesting.\nWith a few intermediate values:\n```scala\ntype First[X] = X match\n case Map[_, v] => First[Option[v]]\n\ndef first[X](x: X): First[X] = x match\n case x: Map[k, v] =>\n val hdOpt: Option[v] = x.values.headOption\n first(hdOpt): First[Option[v]] // error only before changes\n```\nThis now type-checks but will fail at runtime because of the in-exhaustivity of the match expression.\nPerhaps we should add some additional condition in `isMatchTypeShaped` to account for this, or at least emmit a warning ?","shortMessageHtmlLink":"Make match types with no matching cases not an error"}},{"before":null,"after":"8a327410598052ae84b195133acf9557efe7a2e9","ref":"refs/heads/MatchTypeNoCases","pushedAt":"2024-03-15T12:42:08.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Update check-files and remove i18488.scala\n\ni18488.scala was only compiling because of the bug,\nas we can see in the subtyping trace:\n```\n==> isSubType TableQuery[BaseCrudRepository.this.EntityTable] <:< Query[BaseCrudRepository.this.EntityTable, E[Option]]?\n ==> isSubType Query[BaseCrudRepository.this.EntityTable, Extract[BaseCrudRepository.this.EntityTable]] <:<\n Query[BaseCrudRepository.this.EntityTable, E[Option]] (left is approximated)?\n ==> isSubType E[Option] <:< Extract[BaseCrudRepository.this.EntityTable]?\n ==> isSubType [T[_$1]] =>> Any <:< Extract?\n ==> isSubType Any <:< Extract[T]?\n ==> isSubType Any <:< T match { case AbstractTable[t] => t } <: t (right is approximated)?\n ==> isSubType Any <:< t> (right is approximated)?\n <== isSubType Any <:< t> (right is approximated) = true\n <== isSubType Any <:< T match { case AbstractTable[t] => t } <: t (right is approximated) = true\n <== isSubType Any <:< Extract[T] = true\n <== isSubType [T[_$1]] =>> Any <:< Extract = true\n ...\n <== isSubType Extract[BaseCrudRepository.this.EntityTable] <:< E[Option] = true\n <== isSubType Query[BaseCrudRepository.this.EntityTable, Extract[BaseCrudRepository.this.EntityTable]] <:<\n Query[BaseCrudRepository.this.EntityTable, E[Option]] (left is approximated) = true\n<== isSubType TableQuery[BaseCrudRepository.this.EntityTable] <:< Query[BaseCrudRepository.this.EntityTable, E[Option]] = true\n```","shortMessageHtmlLink":"Update check-files and remove i18488.scala"}},{"before":null,"after":"0942eef54c6c2eb31118175d9777a344c79275f7","ref":"refs/heads/issues/i19692","pushedAt":"2024-03-11T18:08:35.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Cover patterns using `reflet.TypeTest` in isMatchTypeShaped","shortMessageHtmlLink":"Cover patterns using reflet.TypeTest in isMatchTypeShaped"}},{"before":"e137ebfa318ba85f79837d1c3baf866739ee6230","after":"2a86c9e85dfbcce93e8acab004d1c505a7672965","ref":"refs/heads/match-alias","pushedAt":"2024-03-11T12:58:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Replace usages of `MatchType.InDisguise` by underlyingMatchType","shortMessageHtmlLink":"Replace usages of MatchType.InDisguise by underlyingMatchType"}},{"before":"e137ebfa318ba85f79837d1c3baf866739ee6230","after":null,"ref":"refs/heads/match-alias-2","pushedAt":"2024-03-11T12:39:42.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"}},{"before":"add986b2141726fe8e384b129e774116d751931b","after":"e137ebfa318ba85f79837d1c3baf866739ee6230","ref":"refs/heads/match-alias","pushedAt":"2024-03-11T12:39:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Use isMatchAlias in TypeOps.simplify and Inlines.unrollTupleTypes","shortMessageHtmlLink":"Use isMatchAlias in TypeOps.simplify and Inlines.unrollTupleTypes"}},{"before":null,"after":"e137ebfa318ba85f79837d1c3baf866739ee6230","ref":"refs/heads/match-alias-2","pushedAt":"2024-03-11T12:38:56.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Use isMatchAlias in TypeOps.simplify and Inlines.unrollTupleTypes","shortMessageHtmlLink":"Use isMatchAlias in TypeOps.simplify and Inlines.unrollTupleTypes"}},{"before":"dbd43b6959258d4e9d00f658e45970d56a783376","after":"add986b2141726fe8e384b129e774116d751931b","ref":"refs/heads/match-alias","pushedAt":"2024-03-07T11:38:45.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Make `isMatch` false for applied `MatchAlias`es\n\nIt is true only for `MatchType`s and higher-kinded abstraction of them.\n\nAs a result, code using `isMatch` to choose between a `TypeAlias` and\n`MatchAlias` will now use a `TypeAlias` when aliasing a `MatchAlias`.\nWhich in turn allows for better de-aliasing, since `dealias` only\nde-aliases standard type aliases.\nThe logic for this distinction has also been extracted to the common\n`AliasingBounds` supertype.\n\n`tryNormalize` on `AppliedType` should only attempt reduction\nif there is an underlying match type. This could previously be\nidentified by a `MatchAlias` tycon. We now need a recursive check.","shortMessageHtmlLink":"Make isMatch false for applied MatchAliases"}},{"before":"95ffbb93bf52e7bae16ed5d76dbdb9c185809705","after":"dbd43b6959258d4e9d00f658e45970d56a783376","ref":"refs/heads/match-alias","pushedAt":"2024-03-07T11:25:47.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Make `isMatch` false for applied `MatchAlias`es\n\nIt is true only for `MatchType`s and higher-kinded abstraction of them.\n\nAs a result, code using `isMatch` to choose between a `TypeAlias` and\n`MatchAlias` will now use a `TypeAlias` when aliasing a `MatchAlias`.\nWhich in turn allows for better de-aliasing, since `dealias` only\nde-aliases standard type aliases.\nThe logic for this distinction has also been extracted to the common\n`AliasingBounds` supertype.\n\n`tryNormalize` on `AppliedType` should only attempt reduction\nif there is an underlying match type. This could previously be\nidentified by a `MatchAlias` tycon. We now need a recursive check.","shortMessageHtmlLink":"Make isMatch false for applied MatchAliases"}},{"before":"93c35630235099744ec9a690db48e2972929af4b","after":"95ffbb93bf52e7bae16ed5d76dbdb9c185809705","ref":"refs/heads/match-alias","pushedAt":"2024-03-07T08:39:38.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Make `isMatch` false for applied `MatchAlias`es\n\nIt is true only for `MatchType`s and higher-kinded abstraction of them.\n\nAs a result, code using `isMatch` to choose between a `TypeAlias` and\n`MatchAlias` will now use a `TypeAlias` when aliasing a `MatchAlias`.\nWhich in turn allows for better de-aliasing, since `dealias` only\nde-aliases standard type aliases.\nThe logic for this distinction has also been extracted to the common\n`AliasingBounds` supertype.\n\n`tryNormalize` on `AppliedType` should only attempt reduction\nif there is an underlying match type. This could previously be\nidentified by a `MatchAlias` tycon. We now need a recursive check.","shortMessageHtmlLink":"Make isMatch false for applied MatchAliases"}},{"before":"c794c5f07fb9a285ec2c461ea7713b3eee5eb388","after":"93c35630235099744ec9a690db48e2972929af4b","ref":"refs/heads/match-alias","pushedAt":"2024-03-06T13:47:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Make `isMatch` false for applied `MatchAlias`es\n\nIt is true only for `MatchType`s and higher-kinded abstraction of them.\n\nAs a result, code using `isMatch` to choose between a `TypeAlias` and\n`MatchAlias` will now use a `TypeAlias` when aliasing a `MatchAlias`.\nWhich in turn allows for better de-aliasing, since `dealias` only\nde-aliases standard type aliases.\nThe logic for this distinction has also been extracted to the common\n`AliasingBounds` supertype.\n\n`tryNormalize` on `AppliedType` should only attempt reduction\nif there is an underlying match type. This could previously be\nidentified by a `MatchAlias` tycon. We now need a recursive check.","shortMessageHtmlLink":"Make isMatch false for applied MatchAliases"}},{"before":"707eb77903d0537a137ee6a4b7c0650ba7b214a0","after":"c794c5f07fb9a285ec2c461ea7713b3eee5eb388","ref":"refs/heads/match-alias","pushedAt":"2024-03-06T13:45:38.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Make `isMatch` false for applied `MatchAlias`es\n\nIt is true only for `MatchType`s and higher-kinded abstraction of them.\n\nAs a result, code using `isMatch` to choose between a `TypeAlias` and\n`MatchAlias` will now use a `TypeAlias` when aliasing a `MatchAlias`.\nWhich in turn allows for better de-aliasing, since `dealias` only\nde-aliases standard type aliases.\nThe logic for this distinction has also been extracted to the common\n`AliasingBounds` supertype.\n\n`tryNormalize` on `AppliedType` should only attempt reduction\nif there is an underlying match type. This could previously be\nidentified by a `MatchAlias` tycon. We now need a recursive check.","shortMessageHtmlLink":"Make isMatch false for applied MatchAliases"}},{"before":"5a6aa2306bcbb3d6ccb8d598a47b519d1a4b501c","after":"707eb77903d0537a137ee6a4b7c0650ba7b214a0","ref":"refs/heads/match-alias","pushedAt":"2024-03-06T13:37:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"EugeneFlesselle","name":"Eugene Flesselle","path":"/EugeneFlesselle","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/43113539?s=80&v=4"},"commit":{"message":"Make `isMatch` false for applied `MatchAlias`es\n\nIt is true only for `MatchType`s and higher-kinded abstraction of them.\n\nAs a result, code using `isMatch` to choose between a `TypeAlias` and\n`MatchAlias` will now use a `TypeAlias` when aliasing a `MatchAlias`.\nWhich in turn allows for better de-aliasing, since `dealias` only\nde-aliases standard type aliases.\nThe logic for this distinction has also been extracted to the common\n`AliasingBounds` supertype.\n\n`tryNormalize` on `AppliedType` should only attempt reduction\nif there is an underlying match type. This could previously be\nidentified by a `MatchAlias` tycon. We now need a recursive check.","shortMessageHtmlLink":"Make isMatch false for applied MatchAliases"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNC0wOFQxODoyMzozOC4wMDAwMDBazwAAAAQrPUZq","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wMy0wNlQxMzozNzozNy4wMDAwMDBazwAAAAQN-trO"}},"title":"Activity ยท EugeneFlesselle/dotty"}