Haskell IO monad的C/C++包装器

前端之家收集整理的这篇文章主要介绍了Haskell IO monad的C/C++包装器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想从C/C++调用 Haskell函数.我已经阅读了一些与该主题相关的教程,但其中没有涉及IO monad调用.特别是,我想调用一个使用交互功能函数(interact ::(String – > String) – > IO()).

>我不明白在这种情况下如何使用函数
>如何在C/C++包装器中声明函数
>如何在C/C++和Haskell之间(在C/C++代码中)传输标准输入/输出的控制?

解决方法

我将保持这个答案相对简短,因为大部分内容都在 FFI documentation中介绍.

您可以通过在C中按名称调用它们来使用这些函数.函数必须声明为外部导出,并且它与调用Haskell中C模块中定义的函数的外部导入语法相似.在C中,您需要将该函数声明为extern并为其指定正常的类型签名.

您的交互函数不能直接声明,因为它引用了未在C中定义的类型.您可以定义和编写在Haskell中调用交互的相关函数

interact_hs :: FunPtr (CString -> CString) -> IO ()

然后,此函数必须使用其参数(包装)来调用交互.

在C中,此功能显示为:

extern void interact_hs(char*(*f)(char*));

或类似的东西,我的函数指针语法生锈.

要从C实际调用函数,您需要初始化Haskell运行时(在文档中介绍),然后调用函数,此时控制执行进入Haskell.一旦函数完成并返回,执行控制权将传回C.

与FFI合作的其他有用资源:

> GHC documentation
>真实世界Haskell在FFI上的chapter
> Edward Z. Yang在FFI上的blog post series和c2hs预处理器

随意建议其他有用的链接

原文链接:https://www.f2er.com/c/118076.html

猜你在找的C&C++相关文章