mxnet-0.2.0.0: MXNet interface in Haskell.

Copyright(c) 2016-2017 Tao He
LicenseMIT
Maintainersighingnow@gmail.com
Safe HaskellSafe
LanguageHaskell2010

MXNet.Core.Base.HMap

Contents

Description

Updatable heterogeneous map.

> let a = add "a" (1 :: Int) nil
> a
[a = 1]
> let b = update "a" (+1) a
> b
[a = 2]
> let c = add "b" (Nothing :: Maybe Float) b
> c
[b = Nothing, a = 2]
> set "b" (Just 128) c
[b = Just 128.0, a = 2]

Synopsis

HMap type definition

data HMap (kvs :: [KV *]) Source #

HMap definition.

Instances

ShowKV kvs => Show (HMap kvs) Source # 

Methods

showsPrec :: Int -> HMap kvs -> ShowS #

show :: HMap kvs -> String #

showList :: [HMap kvs] -> ShowS #

Type level constraints and operators

data KV v Source #

Constructors

Symbol := v infixr 6 

Instances

ShowKV ([] (KV *)) Source # 

Methods

show' :: KVList [KV *] -> [(String, String)] Source #

MatchKVList ([] (KV *)) kvs2 Source # 

Methods

mergeTo' :: HMap [KV *] -> HMap kvs2 -> HMap kvs2 Source #

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

Methods

show' :: KVList ((KV * ': (* := k) v) kvs) -> [(String, String)] Source #

(MatchKVList kvs1 kvs2, InDict k v kvs2) => MatchKVList ((:) (KV *) ((:=) * k v) kvs1) kvs2 Source # 

Methods

mergeTo' :: HMap ((KV * ': (* := k) v) kvs1) -> HMap kvs2 -> HMap kvs2 Source #

class ShowKV (kvs :: [KV *]) where Source #

Minimal complete definition

show'

Methods

show' :: forall k v. KVList kvs -> [(String, String)] Source #

Instances

ShowKV ([] (KV *)) Source # 

Methods

show' :: KVList [KV *] -> [(String, String)] Source #

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

Methods

show' :: KVList ((KV * ': (* := k) v) kvs) -> [(String, String)] Source #

class MatchKVList (kvs1 :: [KV *]) (kvs2 :: [KV *]) where Source #

Merge the first KVList into the second one.

Minimal complete definition

mergeTo'

Methods

mergeTo' :: HMap kvs1 -> HMap kvs2 -> HMap kvs2 Source #

Update all values in the first HMap into the second KVList.

Instances

MatchKVList ([] (KV *)) kvs2 Source # 

Methods

mergeTo' :: HMap [KV *] -> HMap kvs2 -> HMap kvs2 Source #

(MatchKVList kvs1 kvs2, InDict k v kvs2) => MatchKVList ((:) (KV *) ((:=) * k v) kvs1) kvs2 Source # 

Methods

mergeTo' :: HMap ((KV * ': (* := k) v) kvs1) -> HMap kvs2 -> HMap kvs2 Source #

Operations on HMap.

nil :: HMap '[] Source #

Create an empty HMap.

add :: forall k v kvs. No ~ FindKV k v kvs => v -> HMap kvs -> HMap ((k := v) ': kvs) Source #

Add a key-value pair into the HMap (via TypeApplications).

add' :: forall k v kvs. Proxy k -> v -> HMap kvs -> HMap ((k := v) ': kvs) Source #

Add a key-value pair into the HMap (via TypeApplications).

FIXME should have a 'No ~ FindKV k v kvs constraint here.

(.+.) :: forall k v kvs. No ~ FindKV k v kvs => v -> HMap kvs -> HMap ((k := v) ': kvs) infix 8 Source #

Infix version of add.

get :: forall (k :: Symbol) v kvs. InDict k v kvs => HMap kvs -> v Source #

Get the value of an existing key.

(.->.) :: forall (k :: Symbol) v kvs. InDict k v kvs => HMap kvs -> v infix 7 Source #

Infix version of get.

update :: forall (k :: Symbol) v kvs. InDict k v kvs => (v -> v) -> HMap kvs -> HMap kvs Source #

Update the value of an existing key.

set :: forall k v kvs. InDict k v kvs => v -> HMap kvs -> HMap kvs Source #

Set the value of an existing key.

mergeTo :: forall (kvs1 :: [KV *]) (kvs2 :: [KV *]). MatchKVList kvs1 kvs2 => HMap kvs1 -> HMap kvs2 -> HMap kvs2 Source #

Update all values in the first HMap into the second KVList.

dump :: forall kvs. ShowKV kvs => HMap kvs -> [(String, String)] Source #

Dump key-value pair in HMap as [(k, v)].