tagshare-0.0: TagShare - explicit sharing with tags

Safe HaskellSafe
LanguageHaskell98

Control.Monad.TagShare

Contents

Description

A monad for binding values to tags to ensure sharing, with the added twist that the value can be polymorphic and each monomorphic instance is bound separately.

Synopsis

Dynamic map

data DynMap tag #

A dynamic map with type safe insertion and lookup.

Instances

Show tag => Show (DynMap tag) # 

Methods

showsPrec :: Int -> DynMap tag -> ShowS #

show :: DynMap tag -> String #

showList :: [DynMap tag] -> ShowS #

dynInsert :: (Typeable a, Ord tag) => tag -> a -> DynMap tag -> DynMap tag #

dynLookup :: (Typeable a, Ord tag) => tag -> DynMap tag -> Maybe a #

Sharing monad

type Sharing tag a = State (DynMap tag) a #

A sharing monad with a function that binds a tag to a value.

runSharing :: Sharing tag a -> a #

share :: (Typeable a, Ord tag) => tag -> Sharing tag a -> Sharing tag a #