Skip to content

Enum typeclass - #3458

Merged
travisbrown merged 15 commits into
typelevel:masterfrom
yilinwei:master
Jul 6, 2020
Merged

Enum typeclass#3458
travisbrown merged 15 commits into
typelevel:masterfrom
yilinwei:master

Conversation

@yilinwei

@yilinwei yilinwei commented Jun 6, 2020

Copy link
Copy Markdown
Contributor

Add the Enum typeclass #2342 .

A few comments:

  • There are some instances in UpperBounded and LowerBounded companion objects; should these be deleted?
  • Should the partialOrder be the same field as the order just with the bound overridden?

@travisbrown travisbrown left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

There are breaking changes here, but I think they can be avoided without changing the core intent, and I like this addition.

I have one general question (in addition to one specific one about the members method): what do you think about using something like Enumerable instead of Enum? I think reusing the Haskell terminology here might not be the right thing to do, given all the different things "enum" means in Scala, Dotty, and Java.

partialPrevious(a).getOrElse(maxBound)

/** Enumerate the members in ascending order. */
def members: List[A] = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should this maybe be an Iterable or LazyList / Stream? Having a generic method that returns all members as a list in a context where instances will often be for types like Int seems not really ideal.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I agree! I toyed around with Iterable, but didn't like the idea because it's not pure iirc, and the idea of having an impure return type irked me. I don't have a strong preference on either lazy types but I think a NonEmptyLazyList sounds good? I can then add membersAscending/membersDescending on the LowerBounded and UpperBounded Enum types.

@travisbrown

Copy link
Copy Markdown
Contributor

@yilinwei Also, to answer your first question: the instances will need to go in all of the type class roots (see the discussion here), and since this is a rare change that adds new type class roots, it will be a little more complicated than usual. I'm happy to take a closer look at that part once the bincompat issues are resolved, if that works for you.

@yilinwei

yilinwei commented Jun 8, 2020

Copy link
Copy Markdown
Contributor Author

@travisbrown

Thanks for looking at this!

I thought I had ran mima but evidently not correctly. I'll fix the mima issues and ask if I have any particular questions.

Regarding the naming change, I think it makes sense; even more so because we've split it up into Next/Previous.

@travisbrown travisbrown modified the milestones: 2.2.0-M3, 2.2.0 Jun 12, 2020
@yilinwei
yilinwei force-pushed the master branch 4 times, most recently from 821e52e to 5b3695b Compare June 25, 2020 16:16
@yilinwei
yilinwei force-pushed the master branch 3 times, most recently from 127925c to 6081197 Compare June 25, 2020 18:28
@codecov-commenter

codecov-commenter commented Jun 25, 2020

Copy link
Copy Markdown

Codecov Report

Merging #3458 into master will decrease coverage by 0.20%.
The diff coverage is 80.88%.

@@            Coverage Diff             @@
##           master    #3458      +/-   ##
==========================================
- Coverage   91.77%   91.56%   -0.21%     
==========================================
  Files         383      386       +3     
  Lines        8400     8466      +66     
  Branches      208      236      +28     
==========================================
+ Hits         7709     7752      +43     
- Misses        691      714      +23     

@yilinwei

yilinwei commented Jun 25, 2020

Copy link
Copy Markdown
Contributor Author

@travisbrown I've fixed the mima issues and addressed the comments; I seem to be having some dotty issues in the CI.

EDIT.

CI issues were fixed with a clear of the cache.

@travisbrown
travisbrown self-requested a review July 5, 2020 06:14

@travisbrown travisbrown left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This looks good to me, thanks!

@travisbrown travisbrown modified the milestones: 2.2.0, 2.2.0-RC1 Jul 5, 2020
@travisbrown
travisbrown merged commit 0f22151 into typelevel:master Jul 6, 2020
@isomarcte isomarcte mentioned this pull request Nov 30, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants