有没有办法插入类型为
的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代码库呢?
答案 0 :(得分:1)
要回答评论中的问题(因为主要问题的回答是"使用TH"),您也可以使用TH来收集您所受约束的所有名称的列表。然后,在启动时,init
呼叫可以通过该呼叫并强制它们。
答案 1 :(得分:0)
首先不要求第二个参数在IO monad中。
foreign import ccall sin :: Double -> Double
完全合法,但如果罪恶不纯,就会导致不确定的行为。