-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Object-oriented programming with singleton methods and duck typing. -- -- This package provides Object-oriented programming found in -- dynamically-typed languages such as python or ruby. -- -- Object is implemented as Map from method keys to -- values. Different keys can have different value types @package dynamic-object @version 0.1.0.0 module Data.Object.Dynamic.Types -- | A basic object type that can contain values of different types. newtype Object Object :: (Map TypeRep Dynamic) -> Object class Typeable a => KeyType a where type family ValType a :: * -- | A Type synonym for a Member Lens. type Member kt = Lens Object Object (Maybe (ValType kt)) (Maybe (ValType kt)) -- | an empty Object . -- --
-- >>> empty -- Object [] --empty :: Object -- | Given a key type, create a Member Lens labeled by the -- key. Here's an example of creating a price tag for objects. -- --
-- >>> data Price = Price deriving (Show, Typeable) -- -- >>> instance KeyType Price where type ValType Price = Integer -- -- >>> let price :: Member Price; price = mkMember Price; -- -- >>> let x = set price (Just 120) empty -- -- >>> view price empty -- Nothing -- -- >>> view price x -- Just 120 --mkMember :: (KeyType kt, Typeable (ValType kt)) => kt -> Member kt -- | Create a Member Lens with a default value. Here's a -- price tag for objects with default value. -- --
-- >>> data Price = Price deriving (Show, Typeable) -- -- >>> instance KeyType Price where type ValType Price = Integer -- -- >>> let price :: Member Price; price = mkMemberWithDef Price 10; -- -- >>> let x = set price (Just 120) empty -- -- >>> view price empty -- Just 10 -- -- >>> view price x -- Just 120 --mkMemberWithDef :: (KeyType kt, Typeable (ValType kt)) => kt -> ValType kt -> Member kt instance Typeable Object instance Show Object module Data.Object.Dynamic -- | A basic object type that can contain values of different types. data Object -- | an empty Object . -- --
-- >>> empty -- Object [] --empty :: Object