module Control.Distributed.Task.TaskSpawning.FunctionSerialization (serializeFunction, deserializeFunction) where import Data.Binary (encode, decode) import qualified Data.ByteString.Lazy as L import Data.Typeable (Typeable) import qualified GHC.Packing as P import Control.Distributed.Task.Util.ErrorHandling serializeFunction :: (Typeable a, Typeable b) => (a -> b) -> IO L.ByteString serializeFunction = serialize serialize :: Typeable a => a -> IO L.ByteString serialize a = P.trySerialize a >>= return . encode deserializeFunction :: (Typeable a, Typeable b) => L.ByteString -> IO (a -> b) deserializeFunction = deserialize deserialize :: (Typeable a) => L.ByteString -> IO a deserialize bs = withErrorPrefix ("Could not deserialize: "++(show bs)) $ P.deserialize $ decode bs