Serialisation in Haskell
This page collects together the various approaches under discussion for serialising Haskell values, when communicating between distributed Haskell processes.
The four main approaches are:
- Serialisation support in the RTS.
- Serialisation as a library.
- Serialisation using template Haskell.
- Serialisation with a GHC extension for static values.
The following implementations exist.
Jost Berthold (i.e. Mr Eden)
Jost Berthold has done work on serialisation in the Eden RTS
Jost Berthold: packman
Jost has also implemented serialisation as a library called packman.
Simon PJ asks: is the Haddock'd documentation available anywhere?
CloudHaskell implements closures with Template Haskell. Closures are monomorphic in the first implementation. Edsko de Vries made significant changes, and the hackage document claims it supports static polymorphic values: distributed-static library.
Closures are not first class, which makes the template haskell boilerplate code makes code difficult to read for serialising recursive functions. I've documented this, see Figure 2 in Rob Stewart's MsC project
HdpH also uses Template Haskell for closure creation. The differences in closure representation between HdpH and CloudHaskell is described in section 3.2 of Patrick Maier's IFL'11 paper
Mathieu Boespflug at TweagIO
Mathieu and Facundo Domínguez have implemented a GHC extension called StaticPointers.
Here's the user manual
Here are all the commits (to be merged with GHC?):
Mathieu is going to be talking about his serialisation approach on Saturday at HIW. At least Jost, Patrick and myself will be there.