再会!
我项目的核心是在ST
monad 中编写的,我正在尝试添加一些用 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
实例。简单的测试程序运行良好。EncodingEnv
Context
main
尽管如此,所有需要调用这些 C 例程的代码都位于ST
monad 中。我需要将这些Ptr
s存储EncodingEnv
到Context
某个地方。
我应该如何处理 monad 中长期存在的可变C
结构ST
以及如何调用这些C
例程?我的建议是使用STRef (Foreign?Ptr Context)
,但我如何malloc
从这些指针中获取ST
?我在任何示例或教程中都找不到它。
谢谢