haskell / haskell/vector

Overflow in size hints in bundles

Open
#406 0 comments 2 reactions 0 assignees View on GitHub
Dominant language
Haskell
Stars
400
Forks
145
PR merge metrics
No merged PRs in 30d

Description

Consider following program:

```haskell
import qualified Data.Vector.Unboxed as U

main :: IO ()
main = do
print $ U.take 4 $ U.generate (maxBound - 4) id
U.++ U.generate (maxBound - 4) id
```

One could think that it will print `[0,1,2,3]` provided it will fuse. It however fails with.

```
overflow: Data.Vector.Fusion.Bundle.Size.checkedAdd: overflow: -10
CallStack (from HasCallStack):
error, called at src/Data/Vector/Fusion/Bundle/Size.hs:56:7 in vector-0.13.0.1-KtkGVThkqZeLj5OVQdyUBP:Data.Vector.Fusion.Bundle.Size
```

This happens because computation of both exact vector length and upper bound on vector size throws error if it overflows `Int`. I wasn't able to craft example which overflows maximum bound on length which is much more realistic.

This issue is mostly to record that error on error on overflow could cause problems. I'd propose following semantics change: overflow for upper bound on vector size reverts to unbounded. Overflow for lower bound does cause error. (Note not expressible with current implementation of size)

Related: #388

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.