-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Optionally serializable dynamic state keyed by type -- -- Optionally serializable dynamic state keyed by type @package dynamic-state @version 0.3 -- | Copyright (c)2011, Reiner Pope -- -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions are -- met: -- -- -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- -- This module defines Binary and Hashable instances for -- TypeRep. These are defined on a newtype of TypeRep, -- namely ConcreteTypeRep, for two purposes: -- -- -- -- As usual with Typeable, this module will typically be used with -- some variant of Data.Dynamic. Two possible uses of this -- module are: -- -- module Data.ConcreteTypeRep -- | Abstract type providing the functionality of TypeRep, but -- additionally supporting hashing and serialization. -- -- The Eq instance is just the Eq instance for -- TypeRep, so an analogous guarantee holds: cTypeOf a -- == cTypeOf b if and only if a and b have -- the same type. The hashing and serialization functions preserve this -- equality. data ConcreteTypeRep -- | "Concrete" version of typeOf. cTypeOf :: Typeable a => a -> ConcreteTypeRep -- | Converts to the underlying TypeRep toTypeRep :: ConcreteTypeRep -> TypeRep -- | Converts from the underlying TypeRep fromTypeRep :: TypeRep -> ConcreteTypeRep instance Data.Binary.Class.Binary Data.ConcreteTypeRep.SerialRep instance GHC.Classes.Eq Data.ConcreteTypeRep.ConcreteTypeRep instance GHC.Show.Show Data.ConcreteTypeRep.ConcreteTypeRep instance Data.Hashable.Class.Hashable Data.ConcreteTypeRep.ConcreteTypeRep instance Data.Binary.Class.Binary Data.ConcreteTypeRep.ConcreteTypeRep -- | This module implements a simple HashMap ConcreteTypeRep Dynamic module Data.DynamicState -- | An extensible record, indexed by type newtype DynamicState DynamicState :: HashMap ConcreteTypeRep Dynamic -> DynamicState [unDynamicState] :: DynamicState -> HashMap ConcreteTypeRep Dynamic getDyn :: forall a. Typeable a => DynamicState -> Maybe a setDyn :: forall a. Typeable a => DynamicState -> a -> DynamicState -- | Lens with default value _dyn :: (Typeable a, Functor f) => a -> (a -> f a) -> DynamicState -> f DynamicState instance GHC.Base.Monoid Data.DynamicState.DynamicState -- | This module is HashMap ConcreteTypeRep Dynamic with a twist. The -- Dynamic used can also be ByteString, to make repeated reserialization -- cheap. A user-provided State-like is used to store this. module Data.DynamicState.Serializable -- | An extensible record, indexed by type, using state to cache -- deserializtion newtype DynamicState DynamicState :: HashMap ConcreteTypeRep Dynamic -> DynamicState [unDynamicState] :: DynamicState -> HashMap ConcreteTypeRep Dynamic -- | Get a value, inside a State-like monad specified by the first two -- functions getDyn :: forall m a. (Typeable a, Binary a, Monad m) => m DynamicState -> (DynamicState -> m ()) -> m (Maybe a) -- | Set a value, inside a State-like monad specified by the first two -- functions putDyn :: forall m a. (Typeable a, Binary a, Monad m) => m DynamicState -> (DynamicState -> m ()) -> a -> m () instance Data.Binary.Class.Binary Data.DynamicState.Serializable.Dynamic instance GHC.Base.Monoid Data.DynamicState.Serializable.DynamicState instance Data.Binary.Class.Binary Data.DynamicState.Serializable.DynamicState