RosettaCodeData/Task/Call-a-foreign-language-function/Mercury/call-a-foreign-language-function-1.mercury
2015-02-20 00:35:01 -05:00

23 lines
556 B
Text

:- module test_ffi.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
% The actual FFI code begins here.
:- pragma foreign_decl("C", "#include <string.h>").
:- func strdup(string::in) = (string::out) is det.
:- pragma foreign_proc("C", strdup(S::in) = (SD::out),
[will_not_call_mercury, not_thread_safe, promise_pure],
"SD = strdup(S);").
% The actual FFI code ends here.
main(!IO) :-
io.write_string(strdup("Hello, worlds!\n"), !IO).
:- end_module test_ffi.