task-distribution-0.1.0.0: src/Control/Distributed/Task/TaskSpawning/FunctionSerialization.hs
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