hetero-dict-0.1.1.0: Fast heterogeneous data structures

Safe HaskellNone
LanguageHaskell2010

Data.Hetero.KVList

Description

A simple heterogeneous linked-list for k-v pairs.

Synopsis

Documentation

data KV v Source #

(kind) key-value pair

Constructors

Symbol := v 

Instances

(InDict k v kvs, (~) GetResult (Index i) (Ix k ((:) (KV *) ((:=) * k' v') kvs)), KnownNat i) => InDict k v ((:) (KV *) ((:=) * k' v') kvs) Source # 

Methods

get' :: Proxy Symbol k -> Dict ((KV * ': (* := k') v') kvs) -> v

InDict k v ((:) (KV *) ((:=) * k v) kvs) Source # 

Methods

get' :: Proxy Symbol k -> Dict ((KV * ': (* := k) v) kvs) -> v

(InDict k v kvs, (~) GetResult (Index i) (Ix k ((:) (KV *) ((:=) * k' v') kvs)), KnownNat i) => InDict k v ((:) (KV *) ((:=) * k' v') kvs) Source # 

Methods

get' :: Proxy Symbol k -> DynDict ((KV * ': (* := k') v') kvs) -> v

modify' :: Proxy Symbol k -> (v -> v) -> DynDict ((KV * ': (* := k') v') kvs) -> DynDict ((KV * ': (* := k') v') kvs)

InDict k v ((:) (KV *) ((:=) * k v) kvs) Source # 

Methods

get' :: Proxy Symbol k -> DynDict ((KV * ': (* := k) v) kvs) -> v

modify' :: Proxy Symbol k -> (v -> v) -> DynDict ((KV * ': (* := k) v) kvs) -> DynDict ((KV * ': (* := k) v) kvs)

(KnownSymbol k, ToJSON v, ToJSON (DynDict kvs)) => ToJSON (DynDict ((:) (KV *) ((:=) * k v) kvs)) # 

Methods

toJSON :: DynDict ((KV * ': (* := k) v) kvs) -> Value #

toEncoding :: DynDict ((KV * ': (* := k) v) kvs) -> Encoding #

ToJSON (DynDict ([] (KV *))) # 
(KnownSymbol k, FromJSON v, FromJSON (DynDict kvs)) => FromJSON (DynDict ((:) (KV *) ((:=) * k v) kvs)) # 

Methods

parseJSON :: Value -> Parser (DynDict ((KV * ': (* := k) v) kvs)) #

FromJSON (DynDict ([] (KV *))) # 

Methods

parseJSON :: Value -> Parser (DynDict [KV *]) #

ShowDict ([] (KV *)) Source # 

Methods

showDict :: Int -> Dict [KV *] -> [(String, String, TypeRep)] Source #

(KnownSymbol k, Typeable * v, Show v, ShowDict kvs) => ShowDict ((:) (KV *) ((:=) * k v) kvs) Source # 

Methods

showDict :: Int -> Dict ((KV * ': (* := k) v) kvs) -> [(String, String, TypeRep)] Source #

data KVList kvs where Source #

A simple heterogeneous kv linked-list.

Constructors

Cons :: !v -> KVList kvs -> KVList ((k := v) ': kvs) 
Empty :: KVList '[] 

key :: QuasiQuoter Source #

Quoter for constructing string literal proxy.

[key|foo|] == (Proxy :: Proxy "foo")

type family AddKey (k :: Symbol) (kvs :: [KV *]) :: AddResult where ... Source #

Add a key's type to KVList if not existed.

Equations

AddKey k '[] = HasKey k 
AddKey k ((k := v) ': kvs) = DuplicatedKey k 
AddKey k ((k' := v) ': kvs) = AddKey k kvs 

data AddResult Source #

(kind) pretty print type error for NotHasKey.

> add [key|foo|] 12 $ add [key|foo|] "a" emptyStore
Couldn't match type ‘'DuplicatedKey "foo"’ with ‘'HasKey "foo"’

type NotHasKey k kvs = AddKey k kvs ~ HasKey k Source #

Constraint ensure a key will be inserted into Store.

data GetResult Source #

(kind) pretty print type error for Ix

> get [key|b|] (mkDict $ add [key|a|] 123 emptyStore)
Couldn't match type ‘'Index i0’ with ‘'NotFoundKey "b"’

Constructors

Index Nat 
NotFoundKey Symbol 

type Ix k kvs = Ix' 0 k kvs Source #

Indexing a key at compile time.