Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data Dict kvs
- class ShowDict kvs
- data KV v = Symbol := v
- empty :: Dict []
- type (</) k v = HasKey k v ~ AlreadyExists k
- add :: k </ kvs => proxy k -> v -> Dict kvs -> Dict ((k := v) : kvs)
- class Member k v kvs | k kvs -> v
- get :: Member k v kvs => proxy k -> Dict kvs -> v
- type family Members kvs prms :: Constraint
dictionary
showDict
(kind) key-value pair
(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) |
insert
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
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)