Feedback on FFI bindings for C++ library

Hey,
I would like to write FII bindings in haskell for cocos2d-x
(http://www.cocos2d-x.org/), which is a C++ library.
Since I have little experience with this, I would like some feedback
before I discover that concept is bad half way.
In cocos2d there is a base class with much functionality: CCNode
Many classes derive from it (i.E. CCLayer) and use the virtual functions
of CCNode (i.E. setPosition).
How do I map this to haskell?
The general Idea:
I have a typeclass, in which everything that is derived from CCNode is
an instance:
class NodeDerived a where
toNode :: a -> Node
setPosition :: a -> (Double,Double) -> IO ()
setPosition a pos = setNodePosition (toNode a) pos
instane NodeDerived Layer where
toNode = layerToNode
and layerToNode :: Layer -> Node would be implemented in C++ as:
CCNode* layerToNode(CCLayer* l) { return dynamic_cast

I'd suggest to first look at how other C++-bindings for haskell are
implemented. e.g. wxHaskell is the most mature Haskell C++ binding out
there. hogre tries to generate bindings from headers. And a number of
(rather minimal) bindings to some libs were made as part of Nikki and
the Robots.
On Thu, 17 Jan 2013 18:48:02 +0100 Nathan Hüsken
Hey,
I would like to write FII bindings in haskell for cocos2d-x (http://www.cocos2d-x.org/), which is a C++ library.
Since I have little experience with this, I would like some feedback before I discover that concept is bad half way.
In cocos2d there is a base class with much functionality: CCNode Many classes derive from it (i.E. CCLayer) and use the virtual functions of CCNode (i.E. setPosition).
How do I map this to haskell?
The general Idea:
I have a typeclass, in which everything that is derived from CCNode is an instance:
class NodeDerived a where toNode :: a -> Node
setPosition :: a -> (Double,Double) -> IO () setPosition a pos = setNodePosition (toNode a) pos
instane NodeDerived Layer where toNode = layerToNode
and layerToNode :: Layer -> Node would be implemented in C++ as:
CCNode* layerToNode(CCLayer* l) { return dynamic_cast
(l); } This way I would have only to implement toNode for every class derived from CCNode and get all the functions CCNode defines.
What do you think if this Idea? How would you do it?
Thanks! Nathan
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

The simplest way generally is to make make a C binding and then bind
Haskell from there. You may indeed want to take a look at wxWidgets'
binding or SFML's (https://github.com/jeannekamikaze/SFML).
On Fri, Jan 18, 2013 at 1:05 AM, kudah
I'd suggest to first look at how other C++-bindings for haskell are implemented. e.g. wxHaskell is the most mature Haskell C++ binding out there. hogre tries to generate bindings from headers. And a number of (rather minimal) bindings to some libs were made as part of Nikki and the Robots.
On Thu, 17 Jan 2013 18:48:02 +0100 Nathan Hüsken
wrote: Hey,
I would like to write FII bindings in haskell for cocos2d-x (http://www.cocos2d-x.org/), which is a C++ library.
Since I have little experience with this, I would like some feedback before I discover that concept is bad half way.
In cocos2d there is a base class with much functionality: CCNode Many classes derive from it (i.E. CCLayer) and use the virtual functions of CCNode (i.E. setPosition).
How do I map this to haskell?
The general Idea:
I have a typeclass, in which everything that is derived from CCNode is an instance:
class NodeDerived a where toNode :: a -> Node
setPosition :: a -> (Double,Double) -> IO () setPosition a pos = setNodePosition (toNode a) pos
instane NodeDerived Layer where toNode = layerToNode
and layerToNode :: Layer -> Node would be implemented in C++ as:
CCNode* layerToNode(CCLayer* l) { return dynamic_cast
(l); } This way I would have only to implement toNode for every class derived from CCNode and get all the functions CCNode defines.
What do you think if this Idea? How would you do it?
Thanks! Nathan
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Alp Mestanogullari

I'd suggest to first look at how other C++-bindings for haskell are
implemented. e.g. wxHaskell is the most mature Haskell C++ binding out
there. hogre tries to generate bindings from headers. And a number of
(rather minimal) bindings to some libs were made as part of Nikki and
the Robots.
On Thu, 17 Jan 2013 18:48:02 +0100 Nathan Hüsken
Hey,
I would like to write FII bindings in haskell for cocos2d-x (http://www.cocos2d-x.org/), which is a C++ library.
Since I have little experience with this, I would like some feedback before I discover that concept is bad half way.
In cocos2d there is a base class with much functionality: CCNode Many classes derive from it (i.E. CCLayer) and use the virtual functions of CCNode (i.E. setPosition).
How do I map this to haskell?
The general Idea:
I have a typeclass, in which everything that is derived from CCNode is an instance:
class NodeDerived a where toNode :: a -> Node
setPosition :: a -> (Double,Double) -> IO () setPosition a pos = setNodePosition (toNode a) pos
instane NodeDerived Layer where toNode = layerToNode
and layerToNode :: Layer -> Node would be implemented in C++ as:
CCNode* layerToNode(CCLayer* l) { return dynamic_cast
(l); } This way I would have only to implement toNode for every class derived from CCNode and get all the functions CCNode defines.
What do you think if this Idea? How would you do it?
Thanks! Nathan
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (3)
-
Alp Mestanogullari
-
kudah
-
Nathan Hüsken