Skip to content
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

Add 'instance UniformRange Natural' #126

Conversation

curiousleo
Copy link
Collaborator

The main addition here is to add instance UniformRange Natural, also see haskell#44.

To do this, I changed the Integer-specific uniformIntegerM to a generic uniformIntegralM. Since this function was and is recursive, I changed the pragma from INLINE to INLINEABLE.

I made sure that these more generic functions are no slower than before. Note that random/Integer benchmarks small ranges, for which a fast path is triggered; uniformR/unbounded/Integer and the new uniformR/unbounded/Natural benchmark very large ranges where there is no fast path.

Before (9ee79a7):

pure/random/Integer                      mean 362.6 μs  ( +- 44.38 μs  )
pure/uniformR/unbounded/Integer          mean 189.3 ms  ( +- 8.531 ms  )

After (this PR):

pure/random/Integer                      mean 369.0 μs  ( +- 36.89 μs  )
pure/uniformR/unbounded/Integer          mean 122.8 ms  ( +- 6.044 ms  )
pure/uniformR/unbounded/Natural          mean 110.6 ms  ( +- 16.08 ms  )

Other changes:

  • specs use uniformR instead of randomR; this allow us to make the constraints more precise
  • added Natural benchmark and specs
  • sorted some imports alphabetically

@curiousleo curiousleo force-pushed the uniformrange-natural branch from dba6aa8 to bda3a67 Compare May 11, 2020 14:59
Copy link
Owner

@idontgetoutmuch idontgetoutmuch left a comment

Choose a reason for hiding this comment

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

Nice

Copy link
Collaborator

@lehins lehins left a comment

Choose a reason for hiding this comment

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

LGTM

@curiousleo curiousleo merged commit 1b07f29 into idontgetoutmuch:interface-to-performance May 11, 2020
@curiousleo curiousleo deleted the uniformrange-natural branch May 11, 2020 16:25
curiousleo added a commit that referenced this pull request May 13, 2020
curiousleo added a commit that referenced this pull request May 13, 2020
lehins pushed a commit that referenced this pull request May 18, 2020
curiousleo added a commit that referenced this pull request May 19, 2020
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