-
Notifications
You must be signed in to change notification settings - Fork 141
Open
Description
I suggest adding more HasCallStack
constraints.
1. Missing HasCallStack
constraints
Some functions in non- Generic
modules are missing HasCallStack
constraints.
Example: VU.(!)
VU.(!)
does not have HasCallStack
constraint and we don't get full trace:
Example
{- stack script --resolver lts-22.24 --package vector -}
import Data.Vector.Unboxed qualified as VU
main :: IO ()
main = do
let !_ = (VU.fromList [0 :: Int]) VU.! 42
return ()
The call stack does not contain VU.(!)
call from main
:
$ stack example-u.hs
example-u.hs: index out of bounds (42,1)
CallStack (from HasCallStack):
error, called at src/Data/Vector/Internal/Check.hs:103:12 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Internal.Check
checkError, called at src/Data/Vector/Internal/Check.hs:109:17 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Internal.Check
check, called at src/Data/Vector/Internal/Check.hs:122:5 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Internal.Check
checkIndex, called at src/Data/Vector/Generic.hs:235:11 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Generic
!, called at src/Data/Vector/Unboxed.hs:297:7 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Unboxed
VG.(!)
has HasCallStack
constraint and we get a full trace:
Example
{- stack script --resolver lts-22.24 --package vector -}
import Data.Vector.Unboxed qualified as VU
+import Data.Vector.Generic qualified as VG
main :: IO ()
main = do
- let !_ = (VU.fromList [0 :: Int]) VU.! 42
+ let !_ = (VU.fromList [0 :: Int]) VG.! 42
return ()
The call stack contains VG.(!)
call from main
:
$ stack example-g.hs
example-g.hs: index out of bounds (42,1)
CallStack (from HasCallStack):
error, called at src/Data/Vector/Internal/Check.hs:103:12 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Internal.Check
checkError, called at src/Data/Vector/Internal/Check.hs:109:17 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Internal.Check
check, called at src/Data/Vector/Internal/Check.hs:122:5 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Internal.Check
checkIndex, called at src/Data/Vector/Generic.hs:235:11 in vector-0.13.1.0-Aqc2YUE1Egs5WmXVMbcJ5T:Data.Vector.Generic
!, called at /home/tbm/dev/hs/tmp/example-g.hs:8:37 in main:Main
2. head
and more
I personally like to add HasCallStack
to anywhere possible.
For example, the head
function does not have HasCallStack
constraint. But the list's head
function in base
doesn't have it either. What do you think? Thank you.
Metadata
Metadata
Assignees
Labels
No labels