[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