再会!
我项目的核心是在STmonad 中编写的,我正在尝试添加一些用 C 实现的功能。我已经为我需要的所有功能实现了 FFI:
foreign import ccall unsafe "codec/encode.h encode_symbol"
encodeSymbol :: Ptr EncodingEnv
-> CShort -- symbol to encode
-> Ptr Context
-> IO ()
两者Context和EncodingEnv都在 C 例程中进行了修改。我有两个和的工作Storable实例。简单的测试程序运行良好。EncodingEnvContextmain
尽管如此,所有需要调用这些 C 例程的代码都位于STmonad 中。我需要将这些Ptrs存储EncodingEnv到Context某个地方。
我应该如何处理 monad 中长期存在的可变C结构ST以及如何调用这些C例程?我的建议是使用STRef (Foreign?Ptr Context),但我如何malloc从这些指针中获取ST?我在任何示例或教程中都找不到它。
谢谢