使用GHC-iPhone和 外部功能接口相当容易
作为参考,David Pollak有一个实现在Haskell中编写的Lisp解释器的示例,在iPad应用程序中运行:
声明Haskell主要的示例main.m:
extern int Haskell_main(int argc, char* argv[]);
int main(int argc, char* argv[])
{
Haskell_main(argc, argv);
}
Run Code Online (Sandbox Code Playgroud)
在他Main.hs的一系列外部函数声明中,授予他访问Cocoa库的权限:
foreign import ccall safe "openWindow" openWindow
:: IO CInt
data ViewController_struct
type ViewController = Ptr ViewController_struct
type RunStr = ViewController -> CString -> IO ()
foreign import ccall safe "wrapper" wrapFuncInvoke :: RunStr -> IO (FunPtr RunStr)
foreign import ccall safe "setLispEval" setLispEval :: ViewController -> FunPtr RunStr -> IO ()
foreign import ccall safe "addToResult" addToResult :: ViewController -> CString -> IO ()
data ObjCId_struct
type ObjCId = Ptr ObjCId_struct
data ObjCSEL_struct
type ObjCSEL = Ptr ObjCSEL_struct
foreign import ccall safe "objc_msgSend" objc_msgSend :: ObjCId -> ObjCSEL -> IO ObjCId
foreign import ccall safe "objc_msgSend" objc_msgSendInt :: ObjCId -> ObjCSEL -> Int -> IO ObjCId
foreign import ccall safe "sel_registerName" sel_registerName :: CString -> IO ObjCSEL
foreign import ccall safe "objc_lookUpClass" objc_lookUpClass :: CString -> IO ObjCId
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |