将新的FFI方法插入GHC

时间:2012-03-24 16:38:14

标签: haskell ffi

有没有办法插入类型为

的Haskell函数
myFFI :: (C a) => String -> IO a

(其中C是一个类型类描述我可以导入的变量类型)作为FFI方案进入GHC,这样我就可以在我的Haskell程序中编写像

这样的东西
foreign import myFFI "foo" foo :: T1 -> T2

被编译成对foo = unsafePerformIO $ myFFI "foo" :: T1 -> T2的调用?

我想这可以通过修改GHC来完成,但是有没有办法通过我可以编写的插件来完成它而不会触及GHC代码库呢?

2 个答案:

答案 0 :(得分:1)

要回答评论中的问题(因为主要问题的回答是"使用TH"),您也可以使用TH来收集您所受约束的所有名称的列表。然后,在启动时,init呼叫可以通过该呼叫并强制它们。

答案 1 :(得分:0)

首先不要求第二个参数在IO monad中。

foreign import ccall sin :: Double -> Double

完全合法,但如果罪恶不纯,就会导致不确定的行为。