web-routing-0.1.0: simple routing library

Safe HaskellNone
LanguageHaskell2010

Network.Routing.Dict

Contents

Synopsis

dictionary

data Dict kvs Source

heterogeneous dictionary

Instances

ShowDict kvs => Show (Dict kvs) 

class ShowDict kvs Source

Minimal complete definition

showDict

Instances

ShowDict ([] (KV *)) 
(KnownSymbol k, Typeable * v, Show v, ShowDict kvs) => ShowDict ((:) (KV *) ((:=) * k v) kvs) 

data KV v Source

(kind) key-value pair

Constructors

Symbol := v 

Instances

(Member k v kvs, KnownNat (Ix k ((:) (KV *) ((:=) * k' v') kvs))) => Member k v ((:) (KV *) ((:=) * k' v') kvs) 
Member k v ((:) (KV *) ((:=) * k v) kvs) 
ShowDict ([] (KV *)) 
(KnownSymbol k, Typeable * v, Show v, ShowDict kvs) => ShowDict ((:) (KV *) ((:=) * k v) kvs) 
type Members ([] (KV *)) prms = () 
type Members ((:) (KV *) ((:=) * k v) kvs) prms = (Member k v prms, Members kvs prms) 

empty :: Dict [] Source

empty dictionary

insert

type (</) k v = HasKey k v ~ AlreadyExists k Source

'not elem key' constraint(ghc >= 7.8)

add :: k </ kvs => proxy k -> v -> Dict kvs -> Dict ((k := v) : kvs) Source

add key value pair to dictionary.

>>> let a = add (Proxy :: Proxy "foo") (12 :: Int) empty
>>> a
Dict {foo = 12 :: Int}
>>> add (Proxy :: Proxy "bar") "baz" a
Dict {bar = "baz" :: [Char], foo = 12 :: Int}

get

class Member k v kvs | k kvs -> v Source

Minimal complete definition

get'

Instances

(Member k v kvs, KnownNat (Ix k ((:) (KV *) ((:=) * k' v') kvs))) => Member k v ((:) (KV *) ((:=) * k' v') kvs) 
Member k v ((:) (KV *) ((:=) * k v) kvs) 

get :: Member k v kvs => proxy k -> Dict kvs -> v Source

get key from dictionary

>>> let d = add (Proxy :: Proxy "foo") 12 $ add (Proxy :: Proxy "bar") "baz" empty
>>> get (Proxy :: Proxy "foo") d
12
>>> get (Proxy :: Proxy "bar") d
"baz"

convenient

type family Members kvs prms :: Constraint Source

type family to constraint multi kvs.

Members ["foo" := Int, "bar" := Double] prms == (Member "foo" Int prms, Member "bar" Double prms)

Instances

type Members ([] (KV *)) prms = () 
type Members ((:) (KV *) ((:=) * k v) kvs) prms = (Member k v prms, Members kvs prms)