[Haskell-cafe] Serialization of (a -> b) and IO a
Luke Palmer
lrpalmer at gmail.com
Thu Nov 11 03:36:39 EST 2010
On Thu, Nov 11, 2010 at 12:53 AM, Jesse Schalken
<jesseschalken at gmail.com> wrote:
> I have had a look at hs-plugins, but it is unclear how to derive a simple
> pair of functions `(a -> b) -> ByteString` and `ByteString -> Either
> ParseError (a -> b)`, for example, from the functionality it provides, if it
> is possible at all. I guess such a thing requires thorough digging into the
> depths of GHC, (or maybe even LLVM if
> an architecture independent representation is sought, but I don't know
> enough to say.). Perhaps this is more a question for those interested and
> knowledgable in Haskell compilation (and, to some extent, decompilation).
> If not Haskell, are there any languages which provide a simple serialization
> and deserialization of functions?
As far as I know, GHC has no support for this. There are issues with
the idea that will come out pretty fast, such as:
(1) Those cannot be pure functions, because it differentiate
denotationally equal functions. So it would have to be at least (a ->
b) -> IO ByteString.
(2) What if you tried to serialize a filehandle or an FFI Ptr?
But my answers are "Ok" and "Then you get a runtime error",
respectively. It is by no means impossible, IIRC Clean does it. I
think it's pretty dumb that we don't have support for this yet.
Purely functional languages have a unique disposition to be very good
at this. But oh well, there aren't enough tuits for everything.
A more elaborate answer to (2) is "you get a runtime error when you
try to *use* the thing that was impossible to serialize". This makes
sure that you don't get an error if you are trying to serialize \x ->
const x a_filehandle_or_something, which is just the identity
function.
Luke
More information about the Haskell-Cafe
mailing list