我最近一直在与伊德里斯搞混,并决定尝试与其Network.Socket
库玩。我启动了REPL,导入了模块,并使用socket
命令创建了一个套接字。在试图执行IO
操作,我遇到了以下错误:伊德里斯FFI“找不到符号”
failed to construct ffun from (Builtins.MkPair (FFI_C.C_Types (Int)) (Int) (FFI_C.C_IntT (Int) (FFI_C.C_IntNative)) (2),Builtins.MkPair (FFI_C.C_Types (Int)) (Int) (FFI_C.C_IntT (Int) (FFI_C.C_IntNative)) (1),[])
Symbol "socket" not found
user error (Could not call foreign function "socket" with args [2,1,0])
要查看问题是否Network.Socket
具体,或者只是FFI在一般情况下,我做了一个虚函数。
printf : String -> IO()
printf = foreign FFI_C "printf" (String -> IO())
执行的:x printf "Hello World"
产生类似的错误:
Symbol "printf" not found
user error (Could not call foreign function "printf" with args ["hello world"])
尽管这一切,putStr
工作正常。
我正在运行Idris 9.20,通过在编译时设置的-f FFI
与cabal安装。我正在使用通过MacPorts安装的libffi 3.4版本。
我得到了与通过brew安装的idris 0.9.20.1相同的错误,但是将printf放入main并调用:exec使用警告。 – Markus