Re: Haskell(GHC) FFI C
От: VoidEx  
Дата: 14.12.11 10:17
Оценка:
Здравствуйте, alexander.vladislav.popov, Вы писали:

AVP>Привет, RSDN.


AVP>Будь добр, помоги пожалуйста с FFI Haskell (GHC), если у тебя есть возможность.


AVP>Проблема в следующем: я умею в Хаскеле генерить строки по заданному регексу — генексы. Получаю ленивый список строк, который, в принципе, может быть бесконечным. Этот список строк хотелось бы использовать в программе на C. Поэтому хотелось передать в C вычисление, сделанное на Хаскеле, и итеративно отъедать от него строки по мере надобности. Прочитал кучу документации по FFI, но все равно ни как не могу сообразить. Написал в Хаскель-бегинерс, но тоже не дали ответ. Может быть ты поможешь?


AVP>Хотелось бы следующего:



AVP>
AVP>COMPUTATION c = open("rege\x");

AVP>while(need_next()) {
AVP>    printf(next( c ));
AVP>}

AVP>close( c );
AVP>


AVP>С уважением, Александр.


Что именно вызывает проблемы?
Экспортируйте функции (пишу на память, могу соврать, лучше точнее посмотреть в доках)
foreign export ccall open :: CString -> IO (Ptr ())
foreign export ccall need_next :: Ptr () -> IO Bool
foreign export ccall next :: Ptr () -> IO CString


В Ptr () запихиваете любые Haskell-данные, получив из них StablePtr a и закастив к Ptr ().
Строки конвертируете через newCString, peekCString, peekCString.
Придётся, правда, позаботиться об освобождении самому, написав какую-нибудь close, а строки не самому выделять, а получать и заполнять буффер.

Всё, что нужно, можно смотреть здесь в модулях Foreign.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.