dynamic-object-0.1.0.1: Object-oriented programming with singleton methods and duck typing.

Safe HaskellNone

Data.Object.Dynamic.Types

Synopsis

Documentation

newtype Object Source

A basic object type that can contain values of different types.

Constructors

Object (Map TypeRep Dynamic) 

class Typeable a => KeyType a Source

Associated Types

type ValType a :: *Source

type Member kt = Lens Object Object (Maybe (ValType kt)) (Maybe (ValType kt))Source

A Type synonym for a Member Lens.

empty :: ObjectSource

an empty Object .

>>> empty
Object []

mkMember :: forall kt. (KeyType kt, Typeable (ValType kt)) => kt -> Member ktSource

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

mkMemberWithDef :: forall kt. (KeyType kt, Typeable (ValType kt)) => kt -> ValType kt -> Member ktSource

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