Arrays Haskell中的外部阵列Marshall Ptr Ptr
我正在尝试创建一个列表列表,或者从Ptr Ptr b创建一个[[b]],通过FFI从C代码传入。因此,本质上是从二维C数组创建一个列表列表 我的逻辑要求将peekArray应用于Ptr Ptr b,首先获得[Ptr b],然后将peekArray应用于[Ptr b]中的每个元素,以获得[[b]] 我对peekArray的第一次调用似乎给了我[Ptr b]没有问题,但当我试图处理该列表中的每个Ptr b时,Haskell给了我一个错误: 无法将预期类型“[t0]”与实际类型“IO[a0]”匹配 在调用“peekArray”的返回类型中 我对这两个调用使用的peekArray方法相同,只是第二次在列表元素上执行它:Arrays Haskell中的外部阵列Marshall Ptr Ptr,arrays,haskell,marshalling,ffi,Arrays,Haskell,Marshalling,Ffi,我正在尝试创建一个列表列表,或者从Ptr Ptr b创建一个[[b]],通过FFI从C代码传入。因此,本质上是从二维C数组创建一个列表列表 我的逻辑要求将peekArray应用于Ptr Ptr b,首先获得[Ptr b],然后将peekArray应用于[Ptr b]中的每个元素,以获得[[b]] 我对peekArray的第一次调用似乎给了我[Ptr b]没有问题,但当我试图处理该列表中的每个Ptr b时,Haskell给了我一个错误: 无法将预期类型“[t0]”与实际类型“IO[a0]”匹配 在
c <- peekArray q n
c
\x y ptr -> join $ fmap (mapM (peekArray y)) (peekArray x ptr)
或
\x y ptr->do
xs Int->Int->Ptr(Ptr a)->IO[[a]]
,我相信这就是您想要的
\x y ptr -> do
xs <- peekArray x ptr
join $ mapM (peekArray y) xs