我最近一直在與伊德里斯搞混,並決定嘗試與其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