В последнее время я возился с Idris и решил попробовать поиграть с его Network.Socket
библиотекой. Я запустил REPL, импортировал модуль и создал сокет с помощью команды socket
. При попытке выполнить операцию IO
я столкнулся со следующей ошибкой:
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
, установленным при компиляции. Я использую libffi версии 3.4, установленную через MacPorts.