История изменений
Исправление quasimoto, (текущая версия) :
я где-то вычитал упоминание, что, мол, c2hs скриптабельный сам по себе
Если считать
#include "test.h"
{# pointer *Foo as FooPtr -> Foo #}
data Foo = ...
instance Storable Foo where ...
#c
int my_foo(Foo *s) { return foo(*s); }
#endc
withFoo :: Foo -> (FooPtr -> IO a) -> IO a
withFoo = with
{# fun my_foo as foo { withFoo * `Foo' } -> `Int' fromIntegral #}
в *.chs файле с последующим mv *.chs.h -> *.chs.c для передачи *.chs.c в ghc --make. Всё равно руками приходится делать.
Говорят, hsc2hs устроен по-другому, он генерирует сишные файлы. Может в нём данная проблема обойдена?
Насколько я видел при использовании hsc2hs foreign import пишут руками, но может не всё видел.
Ещё можно на libffi посмотреть — общелисповая cffi реализует передачу и возврат структур по значению с её помощью (у реализаций CL с этим тоже проблемы).
Исходная версия quasimoto, :
я где-то вычитал упоминание, что, мол, c2hs скриптабельный сам по себе
Если считать
#include "test.h"
{# pointer *Foo as FooPtr -> Foo #}
data Foo = ...
instance Storable Foo where ...
#c
int my_foo(Foo *s) { return foo(*s); }
#endc
withFoo :: Foo -> (FooPtr -> IO a) -> IO a
withFoo = with
{# fun my_foo as foo { withFoo * `Foo' } -> `Int' fromIntegral #}
в *.chs файле с последующим mv *.chs.h -> *.chs.c для передачи *.chs.c в ghc --make. Всё равно руками приходится делать.
Говорят, hsc2hs устроен по-другому, он генерирует сишные файлы. Может в нём данная проблема обойдена?
Насколько я видел при использовании hsc2hs foreign import пишут руками, но может не всё видел.
Ещё можно на libffi посмотреть — общелисповая cffi реализует передачу и возврат структур по значению с её помощью.