You could use protocol buffers: https://developers.google.com/protocol-buffers/docs/csharptutorial

You would specify the data types you need in an independent language, then use a code generator to get C# classes and Haskell records, and serializers for free. On the Haskell side you can use https://hackage.haskell.org/package/proto-lens. Then you can send the serialized objects over FFI or the network as needed.

On Tue, Mar 13, 2018 at 12:06 AM, Clinton Mead <clintonmead@gmail.com> wrote:
Hi All

I want to integrate Haskell into an existing C# project, initially by creating one C# class that basically does all it's "work" in Haskell (and just provides a C# interface).

There will be a few types passed in and out of this Haskell module from/to C#. On the C# side, there are classes with members, who's types are probably going to be either Strings, Ints, or lists of Strings/Ints, or lists of other objects.

I'd like to have the same types on the Haskell side.

It would be nice if I could just magically pass one of these C# types to Haskell and on the Haskell side it will appear as a Haskell type

I assume what I'll have to do is serialise the type on the C# side and deserialise on the Haskell side.

C# allows one to serialise any data type to XML. Haskell has plenty of serialisation libraries as well.

However, the problem I presume is that if I just serialise to XML on the C# side, and deserialise from XML on the Haskell side, if my types are just slightly different, or even if the exact serialisers/deserialises represent their data in different ways, it isn't going to work. 

It seems like passing complex data to/from Haskell may be a common problem other people experience, so I'm looking for any suggestions on a clean way of doing this.

_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.