建议将Haskell作为脚本引擎嵌入ARM的iOS应用程序中?

Eon*_*nil 8 haskell arm embedding ios

几个月前我试图将Haskell编译成iOS应用程序.不幸的是,我能找到的唯一稳定/维护的实现是GHC,所以我尝试了某种交叉编译,但由于没有用于ARM/iOS的RTS而失败了.

我意识到这对我来说不够容易.所以我要求为此提出一些建议.我知道iOS有一个补丁,但它不再继续了.我考虑过NHC/YHC,但我不能使用丢弃的实现.如果我错了,请纠正我.

Rae*_*eez 8

使用GHC-iPhone外部功能接口相当容易

作为参考,David Pollak有一个实现在Haskell中编写的Lisp解释器的示例,在iPad应用程序中运行:

https://github.com/dpp/LispHaskellIPad

声明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)

  • 嘿......当我在寻找一些GHC-iPhone的东西时,我找到了这篇文章...感觉递归.;-) (4认同)