refined data instead of measure

This commit is contained in:
千住柱間 2025-10-30 23:08:10 +00:00
commit c0d490ad90

View file

@ -104,20 +104,18 @@ safeLookup x i
-- | A pointer tagged with its size
{-@ data PtrSized a = PtrSized { ptrData :: Ptr a , ptrSz :: {n:Int | n >= 0}} @-}
data PtrSized a = PtrSized
{ ptrData :: Ptr a
, ptrSz :: Int
}
{-@ measure ptrSize @-}
ptrSize :: PtrSized a -> Int
ptrSize (PtrSized _ n) = n
{-@ type SafeIndex N = {i:Int | 0 <= i && i < N} @-}
{-@ type SafeIndex v = {i:Int | 0 <= i && i < ptrSz v} @-}
{-@ peekElemN :: Storable a
=> v:PtrSized a
-> SafeIndex (ptrSize v)
-> SafeIndex v
-> IO a
@-}
peekElemN :: Storable a => PtrSized a -> Int -> IO a