如何使用C#(DLLImport)中的高阶类型签名来使用和调用Haskell函数,如...
double :: (Int -> Int) -> Int -> Int -- higher order function
typeClassFunc :: ... -> Maybe Int -- type classes
data MyData = Foo | Bar -- user data type
dataFunc :: ... -> MyData
C#中相应的类型签名是什么?
[DllImport ("libHSDLLTest")]
private static extern ??? foo( ??? );
另外(因为它可能更容易):我如何在C#中使用“未知”Haskell类型,所以我至少可以传递它们,而不知道任何特定类型的C#?我需要知道的最重要的功能是传递类型类(如Monad或Arrow)。
我已经知道how to compile a Haskell library to DLL并在C#中使用,但仅适用于一阶函数。我也知道Stackoverflow - Call a Haskell function in .NET,Why isn't GHC available for .NET和hs-dotnet,我没有找到任何文档和示例(针对C#到Haskell方向)。
答案 0 :(得分:18)
答案 1 :(得分:4)
您是否尝试通过FFI导出功能?这允许您为函数创建更多C-ish接口。我怀疑可以直接从C#调用Haskell函数。有关更多信息,请参阅doc。 (上面的链接)。
在做了一些测试之后,我认为通常不可能通过FFI输出带有类型参数的高阶函数和函数。 [Citation needed]
答案 2 :(得分:3)
好的,感谢FUZxxl,他为“未知类型”提出了一个解决方案。将数据存储在IO上下文中的Haskell MVar 中,并使用一阶函数从C#传递到Haskell。这可能是至少在简单情况下的解决方案。