----------------------------------------------------------------------------- -- -- Module : Control.Workflow.GenSerializer -- Copyright : -- License : BSD3 -- -- Maintainer : agocorona@gmail.com -- Stability : experimental -- Portability : -- ----------------------------------------------------------------------------- {-# OPTIONS -XMultiParamTypeClasses -XFunctionalDependencies -XFlexibleContexts -XFlexibleInstances -XUndecidableInstances -XScopedTypeVariables #-} {- | This module includes the definition of a generic (de)serializer. This is used as a class constraints for the Workflow methods. Data.RefSerialize (defined in "Control.Workflow.Text.TextDefs") and Data.Binary ("Control.Workflow.Binary.BinDefs") are particular instances of thiis generic serializer. -} module Control.Workflow.GenSerializer where import Data.ByteString.Lazy.Char8 as B import Data.RefSerialize(Context) import Data.Map as M import Control.Concurrent import System.IO.Unsafe class (Monad writerm, Monad readerm) => Serializer writerm readerm a | a -> writerm readerm where serial :: a -> writerm () deserial :: readerm a class (DynSerializer w r a, DynSerializer w r b) => TwoSerializer w r a b instance (DynSerializer w r a, DynSerializer w r b) => TwoSerializer w r a b class (DynSerializer w r a, DynSerializer w r b,DynSerializer w r c) => ThreeSerializer w r a b c instance (DynSerializer w r a, DynSerializer w r b, DynSerializer w r c) => ThreeSerializer w r a b c class (Monad writerm ,Monad readerm) => RunSerializer writerm readerm | writerm -> readerm , readerm -> writerm where runSerial :: writerm () -> ByteString runDeserial :: Serializer writerm readerm a => readerm a -> ByteString -> a class (Serializer w r a, RunSerializer w r) => DynSerializer w r a | a -> w r where serialM :: a -> w ByteString serialM = return . runSerial . serial fromDynData :: ByteString ->(Context, ByteString) -> a fromDynData s _= runDeserial deserial s