This module provides default persistence , understood as retrievong and storing thje object in serialized blobs for Indexable and serializable instances. The user can define it with setPersist. If the user does not set it, persistence in files is used.
- class Indexable a where
- class Serializable a | a -> where
- serialize :: a -> ByteString
- deserialize :: ByteString -> a
- setPersist :: Persist -> IO ()
- data Persist = Persist {}
Documentation
Indexable is an utility class used to derive instances of IResource
Example:
data Person= Person{ pname :: String, cars :: [DBRef Car]} deriving (Show, Read, Typeable) data Car= Car{owner :: DBRef Person , cname:: String} deriving (Show, Read, Eq, Typeable)
Since Person and Car are instances of Read
ans Show
, by defining the Indexable
instance
will implicitly define the IResource instance for file persistence:
instance Indexable Person where key Person{pname=n} = "Person " ++ n instance Indexable Car where key Car{cname= n} = "Car " ++ n
class Serializable a | a -> whereSource
Serialize is an abstract serialization ionterface in order to define implicit instances of IResource. The deserialization must be as lazy as possible if deserialized objects contain DBRefs, lazy deserialization avoid unnecesary DBRef instantiations when they are not accessed, since DBRefs instantiations involve extra cache lookups For this reason serializationdeserialization is tofrom ordinary Strings serialization/deserialization are not performance critical in TCache
Read, Show, instances are implicit instances of Serializable
serialize = show deserialize= read
serialize :: a -> ByteStringSource
deserialize :: ByteString -> aSource
Serializable IndexText | |
Queriable reg a => Serializable (Index reg a) |
setPersist :: Persist -> IO ()Source
set an alternative persistence for Indexable and Serializable objects