Я сделал короткую программу на Haskell, которая предоставляет функции для C или Python. Читал на http://www.haskell.org/ghc/docs/7.0.3/html/users_guide/ffi-ghc.html#ffi-library к письму, и это сработало для экспорта целых чисел.
Хотите экспортировать строки и сделали программу:
module Adder where
import CString
adder :: Int -> Int -> IO CString
adder x y = newCString(show(x+y))
foreign export ccall adder :: Int -> Int -> IO CString
Это нормально компилируется, когда я делаю: ghc adder.hs, но при связывании для создания dll в Windows происходит сбой.
ghc -shared -o adder.dll adder.o adder_stub.o StartEnd.o
Ошибка: adder.o:fake:(.text+0x11d): неопределенная ссылка на `__stginit_haskell98zm1zi1zi0zi1_CString_'
StartEnd.o скомпилирован из C-файла, который я скопировал с сайта haskell.org:
#include <Rts.h>
extern void __stginit_Adder(void);
void HsStart()
{
int argc = 1;
char* argv[] = {"ghcDll", NULL}; // argv must end with NULL
// Initialize Haskell runtime
char** args = argv;
hs_init(&argc, &args);
// Tell Haskell about all root modules
hs_add_root(__stginit_Adder);
}
void HsEnd()
{
hs_exit();
}
Что я должен сделать, чтобы иметь возможность экспортировать строки ??
f (g x)
, либоf $ g x
, либоf . g $ x
- person alternative   schedule 22.07.2011