Ich werde diese Antwort relativ kurz halten, da das meiste davon in der FFI documentation abgedeckt ist.
Sie können die Funktionen verwenden, indem Sie sie in C namentlich aufrufen. Die Funktionen müssen als foreign export
deklariert werden und entsprechen der foreign import
Syntax zum Aufrufen von Funktionen, die in einem C-Modul in Haskell definiert sind. In C müssen Sie die Funktion als extern
deklarieren und geben Sie eine normale Signatur.
Ihre interact
Funktion kann nicht direkt deklariert werden, weil es Typen verweist, die nicht in C definiert sind, können Sie eine entsprechende Funktion definieren und schreiben, die interact
in Haskell ruft:
interact_hs :: FunPtr (CString -> CString) -> IO()
Diese Funktion würde dann muss sein Argument (mit Umbruch) verwenden, um interact
aufzurufen.
In C diese Funktion erscheint dann als:
extern void interact_hs(char*(*f)(char*));
oder so ähnlich, meine Funktionszeiger Syntax rostig ist.
Um diese Funktion tatsächlich von C aufzurufen, müssen Sie die Haskell-Laufzeit (in der Dokumentation behandelt) initialisieren und dann die Funktion aufrufen, wobei die Ausführungssteuerung in Haskell übergeht. Sobald die Funktion beendet und kehrt die Steuerung der Ausführung fährt zurück in C.
Weitere nützliche Ressourcen für die mit dem FFI arbeiten:
Fühlen Sie sich frei, andere nützliche Links vorschlagen!
Möchten Sie Haskell von C oder C von Haskell anrufen? – acomar
@acomar Ich glaube der OP möchte Haskell von C. anrufen. – duplode
@ duplode Genau, würde ich gerne Haskell von C/C++ anrufen – Simplex