Workflow-0.5.8.0: Data/Persistent/Queue/Binary.hs
{-# OPTIONS -XDeriveDataTypeable
-XTypeSynonymInstances
-XMultiParamTypeClasses
-XExistentialQuantification
-XOverloadedStrings
-XFlexibleInstances
-XUndecidableInstances
-XFunctionalDependencies
-XFlexibleContexts
-XIncoherentInstances
-IControl/Workflow
-XCPP #-}
{-# OPTIONS -IData/Persistent/Queue #-}
{- |
This module implements a persistent, transactional collection with Queue interface as well as indexed access by key
This module uses `Data.Binary` for serialization.
Here @QueueConstraints w r a@ means @Data.Binary.Binary a@
For optimal (de)serialization if you store in the queue different versions of largue structures , for
example, documents you better use "Data.RefSerialize" and "Data.Persistent.Queue.Text" Instead.
-}
module Data.Persistent.Queue.Binary(
RefQueue(..), getQRef,
pop,popSTM,pick,Data.Persistent.Queue.Binary.flush, flushSTM,
pickAll, pickAllSTM, push,pushSTM,
pickElem, pickElemSTM, readAll, readAllSTM,
deleteElem, deleteElemSTM,
unreadSTM,Data.Persistent.Queue.Binary.isEmpty,isEmptySTM
) where
import Data.Typeable
import Control.Concurrent.STM(STM,atomically, retry)
import Control.Monad(when)
import Data.TCache.DefaultPersistence
import Data.TCache
import System.IO.Unsafe
import Data.IORef
import Data.ByteString.Lazy.Char8
import Control.Workflow.GenSerializer
import Data.Binary
import Data.Binary.Put
import Data.Binary.Get
instance SerialiserString PutM Get where
serialString= put
deserialString= get
instance Indexable (Queue a) where
key (Queue k _ _)= queuePrefix ++ k
defPath _= "WorkflowState/Binary/"
#include "Queue.inc.hs"