我在 Haskell 模块中有以下数据类型,我想编写一个 Storable 实例以通过 FFI 将其与 C 一起使用:
data MyType a =
TypeDouble Double
| TypeLst [a]
| TypeAdd (MyType a) (MyType a)
我从定义sizeOf
函数开始:
instance Storable a => Storable (MyType a) where
sizeOf (TypeDouble _) = sizeOf (0 :: Double)
sizeOf (TypeLst lst) = sum $ map sizeOf lst
sizeOf (TypeAdd a b) = sizeOf a + sizeOf b
它编译得很好,但我不知道如何实现peek
andpoke
函数。我认为以与此答案相同的方式实现这些功能,但此实现仅在列表中的所有元素具有相同大小的情况下才有效,而此处并非如此。
对于元素具有浮动大小的递归类型,实现peek
和函数的正确方法是什么?poke