Dzwonienie do Haskella z C #

Właśnie spędziłem ostatni tydzień, zastanawiając się, jak wykonać kod C ++ z C # w ramach mojej codziennej pracy. Rozumienie tego zajęło nam wiecznie, ale ostateczne rozwiązanie jest dość proste.

Teraz jestem ciekawy ... Jak trudno byłoby zadzwonić do Haskella z C #? (Uwaga uważnie: nazywa się Haskellz C #, a nie odwrotnie. Główny plik wykonywalny to C #.)

Jeśli to naprawdę trudne, nie będę się martwić. Ale jeśli jest to dość łatwe, może będę musiał się z tym pobawić ...

Zasadniczo napisaliśmy trochę kodu C ++. W systemie Windows jest wkompilowany w bibliotekę DLL, w systemie Linux jest wkompilowany w obiekt udostępniony (*.so). Następnie po stronie C # robiszDllImport i napisz jakiś ręczny kod zarządzania pamięcią, jeśli próbujesz przekazać coś nietrywialnego. (Np. Tablice, łańcuchy itp.)

Wiem, że GHC ma wspierać tworzenie współdzielonych bibliotek na obu platformach, ale nie jestem pewien szczegółów technicznych. Jaka jest składnia eksportu rzeczy i czy wywołujący musi zrobić coś specjalnego, aby najpierw zainicjować DLL?

Konkretnie: załóżmy, że istnieje funkcjafoobar :: FilePath -> IO Int32. Czy ktoś może rzucić mały szkic pokazujący:

Jakie deklaracje Haskella muszę napisać, aby narazić to na świat zewnętrzny.Jak powiedzieć GHC, aby zbudował pojedynczy samodzielny plik DLL / SO.Wszystko, co osoba dzwoniąca musi zrobić, poza zwykłym procesem wiązaniafoobar samo.

Nie martwię się zbytnio o faktyczną składnię strony C #; Myślę, że bardziej lub mniej to zaintrygowałem.

P.S. Spojrzałem krótkohs-dotnet, ale to wydaje się być specyficzne dla systemu Windows. (To znaczy, nie będzie działać z Mono, więc nie będzie działać na Linuksie.)

questionAnswers(2)

yourAnswerToTheQuestion