`Size` can be a newtype.
Open
- Dominant language
- Haskell
- Stars
- 400
- Forks
- 145
- PR merge metrics
- No merged PRs in 30d
Description
The `Exact` and `Max` constructors require a nonnegative `Int`. Denotationally, `Exact 0` is the same as `Max 0`. There's also unknown. This means you can fit an entire `Size` into the same space as an `Int`:
* `Exact n` is represented by a non-negative `n`.
* `Max n` is represented by a negative `n`, where `n` <= `maxBound`.
* `Unknown` is `minBound`, because `minBound == negate minBound`.
Doing so would allow `Size` to be unpacked in `Bundle` and various functions. `Exact`, `Max`, and `Unknown` can be pattern synonyms. I feel like this would improve performance somewhat.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.