[Haskell-cafe] ANN: bindings-DSL 1.0.4 (Category: FFI)
Maurício CA
mauricio.antunes at gmail.com
Fri Jan 22 22:02:07 EST 2010
Hi,
bindings-DSL is a mature and well documented preprocessor domain
specific language you can use to generate bindings to a C API.
It's based on functionality provided by hsc2hs. These are links to
Hackage page and documentation:
http://hackage.haskell.org/package/bindings-DSL
http://bitbucket.org/mauricio/bindings-dsl
New in this version:
* Support for C unions.
* Use of <inttypes.h> macros for wider portability.
An example on the use of unions follow. Suppose you have:
union example {
int k;
char c[4];
};
Then, using bindings-DSL, you'll write:
#starttype union example
#union_field k , CInt
#union_array_field c , CChar
#stoptype
Here is a ghci session showing the resulting code:
> let value = C'example 1 []
> u'example'k value (2^10)
C'example {c'example'k = 1024, c'example'c = [0,4,0,0]}
> u'example'c value [1,0,0,0]
C'example {c'example'k = 1, c'example'c = [1,0,0,0]}
> u'example'c value [0,0,0,1]
C'example {c'example'k = 16777216, c'example'c = [0,0,0,1]}
Peeking an uninitialized memory address:
> v <- alloca $ \p -> peek p :: IO C'example
> v
C'example {c'example'k = 81842189, c'example'c = [13,-48,-32,4]}
Hope it's useful to you. Best,
Maurício
More information about the Haskell-Cafe
mailing list