Haskell FFI - return 更新结构

Haskell FFI - return updated structure

我想从 Haskell 调用以下 C 函数:

void read_params_for (property_list_t *props);

该函数应该接收一些 property_list_t 并在其中填充一些值,因此调用者然后具有更新的结构。

我有 property_list_t(如 Storable 等)的所有必要包装器,但我不知道如何将此函数包装成

之类的东西
readParamsFor :: ForeignPtr PropertyListT -> IO (ForeignPtr PropertyListT)

我尝试使用 C2HS,我也尝试手动编写 FFI 绑定,例如:

foreign import ccall "read_params_for"
    readParamsFor' :: Ptr PropertyListT -> IO ()

readParamsFor :: ForeignPtr PropertyListT -> IO (ForeignPtr PropertyListT)
readParamsFor ps = do
    withForeignPtr ps $ \ps' -> do
        res <- readParamsFor' ps'
        pl <- newForeignPtr propertyListDestroy ps'
        return pl

但在这两种情况下,我都会取回原来的 "underpopulated" 列表。

如何将更新的结构返回到 Haskell?

我意识到我想使用的 C 库中有一个错误,确实,如果没有错误,一个简单的 withForeignPtr 就足够了。