Skip to content

Clean up kindedness tests #4360

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 7, 2018
Merged

Conversation

odersky
Copy link
Contributor

@odersky odersky commented Apr 23, 2018

We currently mostly use isLambdaSub which detects unapplied
abstract and alias types but not unapplied generic classes.
We should use hasHigherKind more often, which includes
unapplied classes.

The first commit fixes a problem with hasHigherKind where
abstract types upper bounded by AnyKind where not classified
as higher-kinded.

It also changes checkSimpleKinded to use hasHigherKind instead
if isLambdaSub.

I thought it would be good to get this in before I proceed with effects, since
effects effectively introduce another kind.

@odersky odersky requested a review from smarter April 27, 2018 10:37
@@ -213,7 +213,10 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
}
case tree: TypeApply =>
val tree1 @ TypeApply(fn, args) = normalizeTypeArgs(tree)
Checking.checkBounds(args, fn.tpe.widen.asInstanceOf[PolyType])
if (fn.symbol != defn.ChildAnnot.primaryConstructor) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of special-casing Child, the compiler could be changed to always use it with fully-applied types with wildcards, e.g. Child[Cons[_]]

odersky added 4 commits April 30, 2018 21:17
We currently mostly use isLambdaSub which detects unapplied
abstract and alias types but not unapplied generic classes.
We should use `hasHigherKind` more often, which includes
unapplied classes.

The first commit fixes a problem with `hasHigherKind` where
abstract types upper bounded by `AnyKind` where not classified
as higher-kinded.

It also changes checkSimpleKinded to use hasHigherKind instead
if isLambdaSub.
Also disallow unapplied classes if bounds are first-kinded.
This broke the Child annotation which should really be kind
polymorphic. Fixed for now by making a special exception for Child.
hasHigherKind is misleading since it will cover AnyKind and Effect as
well and it is not clear how these are "higher" kinds.
@odersky odersky force-pushed the change-kindedness branch from 1152369 to 2470455 Compare April 30, 2018 19:20
@allanrenucci allanrenucci merged commit 8698e48 into scala:master May 7, 2018
@allanrenucci allanrenucci deleted the change-kindedness branch May 7, 2018 14:27
Blaisorblade added a commit to dotty-staging/dotty that referenced this pull request May 17, 2018
This follows scala#4360. I'd love to add a test but scala#4360 has none, so I'm not 100%
sure what it'd look like.
Blaisorblade added a commit to dotty-staging/dotty that referenced this pull request May 25, 2018
This follows scala#4360. I'd love to add a test but scala#4360 has none, so I'm not 100%
sure what it'd look like.
Blaisorblade added a commit to dotty-staging/dotty that referenced this pull request Aug 16, 2018
This follows scala#4360. I'd love to add a test but scala#4360 has none, so I'm not 100%
sure what it'd look like.
Blaisorblade added a commit to dotty-staging/dotty that referenced this pull request Aug 16, 2018
This follows scala#4360. I'd love to add a test but scala#4360 has none, so I'm not 100%
sure what it'd look like.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants