Possible to call Haskell function from C and return a struct by value?
sframe
scott.frame at gmail.com
Wed Mar 30 06:41:08 CEST 2011
Greetings,
I am a Haskell novice, but I have written some Haskell functions and would
like to call them from C++.
The functions perform world coordinate system conversions like the
following:
data Geocentric = Geocentric
{
ecefX :: Double,
ecefY :: Double,
ecefZ :: Double
}
deriving (Show)
data Geodetic = Geodetic
{
latitude :: Double,
longitude :: Double,
height :: Double
}
deriving (Show)
geocentricToGeodetic :: Geocentric -> Geodetic
geocentricToGeodetic geocentric = Geodetic lat lon height
where ...
...
lat = ...
lon = ...
height = ...
I would like to call these functions from C++ using FFI, and have figured
out how to wrap using FFI to accept and return primitive types:
xGeocentricFromGeodetic :: CDouble -> CDouble -> CDouble -> CDouble
xGeocentricFromGeodetic lat lon height = realToFrac (ecefX
(geodeticToGeocentric (Geodetic (realToFrac lat)
(realToFrac lon)
(realToFrac height))))
foreign export ccall xGeocentricFromGeodetic :: CDouble -> CDouble ->
CDouble -> CDouble
Would there be a way to accept a C struct and return a C struct by value,
something like this:
struct Geocentric
{
double ecefX;
double ecefY;
double ecefZ;
};
struct Geodetic
{
double lat;
double lon;
double height;
};
With a method like the following:
Geocentric geocentricToGeodetic (const Geodetic & geod);
I have investigated the Storable class, but it seems as though this is
intended to be used with pointers.
In addition, it seems that most of the examples I have found deal with
calling C code from Haskell and not vice-versa.
Does anyone know if this can be achieved, and if so how? Any help is much
appreciated.
--
View this message in context: http://haskell.1045720.n5.nabble.com/Possible-to-call-Haskell-function-from-C-and-return-a-struct-by-value-tp4270735p4270735.html
Sent from the Haskell - FFI mailing list archive at Nabble.com.
More information about the FFI
mailing list