-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Sharing/memoization of class members -- -- Library for ensuring that class members are shared. @package dictionary-sharing @version 0.1.0.0 module Data.ClassSharing data Shared f a newtype Shareable f a Shareable :: (Ref -> f a) -> Shareable f a [run] :: Shareable f a -> (Ref -> f a) -- | Share/memoize a class member of type f a. share :: (Typeable a, Typeable f) => Shareable f a -> Shared f a -- | Should only be used to access class members. A safe wrapper should be -- defined for every shared class member. Direct access can lead to -- overriding class member definitions. unsafeAccess :: Shared f a -> Shareable f a runShared :: Shared f a -> Ref -> f a type Ref = IORef DynMap -- | A dynamic map with type safe insertion and lookup. data DynMap newRef :: IO Ref unsafeNewRef :: () -> Ref -- | The class Typeable allows a concrete representation of a type -- to be calculated. class Typeable (a :: k) instance GHC.Show.Show Data.ClassSharing.DynMap instance GHC.Base.Functor f => GHC.Base.Functor (Data.ClassSharing.Shareable f) instance GHC.Base.Applicative f => GHC.Base.Applicative (Data.ClassSharing.Shareable f) instance GHC.Base.Alternative f => GHC.Base.Alternative (Data.ClassSharing.Shareable f)