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

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to