[Haskell-cafe] FFI basics

Sven Panne sven.panne at aedion.de
Mon Feb 12 07:49:25 EST 2007


On Monday 12 February 2007 09:54, Yitzchak Gale wrote:
> Bulat Ziganshin wrote:
> > examples of lifting C functions into Haskell world:
> >
> > mysin :: Double -> Double
> > mysin = realToFrac . c_mysin . realToFrac
> >
> > -- c_mysin :: CDouble -> CDouble
> >
> > rnd :: Int -> IO Int
> > rnd x = do r <- c_rnd (fromIntegral x)
> >            return (fromIntegral r)
> >
> > -- c_rnd :: CInt -> IO CInt
>
> OK, got it. I'll put that in.

Just a small note here: GHC and the base library are both very careful to 
completely eliminate things like realToFrac or fromIntegeral in code similar 
to the one above, if the representations of the Haskell type and the C type 
are identical. Therefore there is no need to sacrifice portability for speed 
by leaving these conversion function out and making invalid assumptions. If 
actual conversion code is generated without a good reason, I would consider 
this as a bug.

Cheers,
   S.


More information about the Haskell-Cafe mailing list