haskell / haskell/vector

`Size` can be a newtype.

Open
#569 0 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.