[Haskell-cafe] Writing and testing a Storable instance for a record wrapping ForeignPtrs

Hécate hecate at glitchbra.in
Mon Nov 28 16:04:32 UTC 2022


Hi everyone,

In a fit of madness I have found myself writing Haskell code where I 
need to implement a Storable instance. However, by virtue of not being a 
C programmer, I'm fairly lost on some of the details, especially the 
value of the sizeOf and alignment methods.

My Haskell-level record is the following:

data SignedMessage = SignedMessage
   { messageLength :: CSize
   , messageForeignPtr :: ForeignPtr CUChar
   , signatureForeignPtr :: ForeignPtr CUChar
   }


Here is the code of the Storable instance: 
https://gist.github.com/Kleidukos/31346d067f309f2a86cbd97a85c0f1e8#file-signing-hs

And so I used `hedgehog-classes` to test the Storable instance. However, 
all the tests fail with the same reason: Prelude.undefined:

https://gist.github.com/Kleidukos/31346d067f309f2a86cbd97a85c0f1e8#file-undefined_error-txt

The main problem (and that's certainly a red herring for me) is that the 
`undefined` call comes frombase:Foreign.Marshal.Array.
Which shouldn't be a problem, as it is not supposed to be evaluated!
Yet apparently it is.

If you're interested to see the full code, it's located here: 
https://github.com/haskell-cryptography/libsodium-bindings/blob/add-sel-package/sel/src/Sel/Signing.hs

I'm not sure how to proceed from here. What would be a good angle to 
approach this?

Cheers,
Hécate

-- 
Hécate ✨
🐦: @TechnoEmpress
IRC: Hecate
WWW: https://glitchbra.in
RUN: BSD



More information about the Haskell-Cafe mailing list