[Haskell-beginners] Question about CFloat and Float

Alberto Ruiz aruiz at um.es
Thu Apr 28 15:27:41 CEST 2011


Hi Christian,

On 04/28/2011 02:27 PM, C Gosch wrote:
> Dear list members,
> I have the following problem: I have wrapped a C library using the FFI
> and c2hs.
> The C functions all take a bunch of pointers to C arrays of floats,
> doubles, or ints as arguments.
> Naturally, the Haskell representation of these is e.g.
>   Ptr CFloat
> or, for single values, CFloat.
> My question is: if I have an array, e.g. allocated with mallocArray, to
> Haskell Float values (Ptr Float),
> is the representation of Float exactly the same as for CFloat? Can I
> safely use Ptr Float where the C function
> expects the C type float* ?
> I assume that I can not, and in that case I would like to find a way to
> have Float on the Haskell side and CFloat on the C side.
> Any hint on how I would do that without copying data and without too
> large performance penalties?
>
> Thanks a lot,
> Christian
>

I think that in ghc you can assume the same representation for CFloat 
and CDouble, they are newtypes of Float and Double:

http://www.haskell.org/ghc/docs/7.0.3/html/libraries/base-4.3.1.0/Foreign-C-Types.html#g:4

(I directly use arrays of Float and Double with C libraries without any 
problem). But Int may be different from CInt depending on the 
architecture, so we need explicit conversions.

Alberto



More information about the Beginners mailing list