~/bend-docscommunity

hmap.bend checks

raw source on the hub · import 0xd2d968d969a26029a632a3347c989456/hmap.bend as Hmap

HMap: a hash trie keyed by any Data type, with equality-checked collision buckets. Equal keys must have equal hashes; different keys with one hash share a bucket.

1 import
import Base

Types

type Entry source · line 5 · raw

@-K:Data -> @-V:Data -> Data

type HMap source · line 8 · raw

@-K:Data -> @-V:Data -> Data

Definitions

def HMap.new source · line 13 · raw

@-K:Data -> @-V:Data -> HMap<K, V>

def HMap.bool source · line 16 · raw

@-A:Type -> @b:Bool -> @yes:(@_:Unit -> A) -> @no:(@_:Unit -> A) -> A

def HMap.split.side source · line 59 · raw

@-K:Data -> @-V:Data -> @left:Bool -> @old:HMap<K, V> -> @fresh:HMap<K, V> -> HMap<K, V>

def HMap.leaf source · line 149 · raw

@-K:Data -> @-V:Data -> @+hash:U32 -> @xs:List<&2, Entry<K, V>> -> HMap<K, V>

An emptied bucket becomes HNil.

def HMap.join source · line 157 · raw

@-K:Data -> @-V:Data -> @lo:HMap<K, V> -> @hi:HMap<K, V> -> HMap<K, V>

Rebuilds a branch; one with two empty subtries becomes HNil.

def HMap.size source · line 204 · raw

@-K:Data -> @-V:Data -> @m:HMap<K, V> -> Nat

Templates

template HMap.entries.put source · line 23 · raw

@-K:Data -> @-V:Data -> @-eq:(@_:K -> @_:K -> Bool) -> @xs:List<&2, Entry<K, V>> -> @+k:K -> @+v:V -> List<&2, Entry<K, V>>

template HMap.entries.get source · line 35 · raw

@-K:Data -> @-V:Data -> @-eq:(@_:K -> @_:K -> Bool) -> @xs:List<&2, Entry<K, V>> -> @+k:K -> Maybe<&2, V>

template HMap.entries.del source · line 47 · raw

@-K:Data -> @-V:Data -> @-eq:(@_:K -> @_:K -> Bool) -> @xs:List<&2, Entry<K, V>> -> @+k:K -> List<&2, Entry<K, V>>

template HMap.split source · line 68 · raw

@-K:Data -> @-V:Data -> @-eq:(@_:K -> @_:K -> Bool) -> @+n:Nat -> @+mask:U32 -> @+oldhash:U32 -> @+entries:List<&2, Entry<K, V>> -> @+hash:U32 -> @+k:K -> @+v:V -> HMap<K, V>

template HMap.put.go source · line 84 · raw

@-K:Data -> @-V:Data -> @-eq:(@_:K -> @_:K -> Bool) -> @+n:Nat -> @+mask:U32 -> @m:HMap<K, V> -> @+hash:U32 -> @+k:K -> @+v:V -> HMap<K, V>

template HMap.put source · line 110 · raw

@-K:Data -> @-V:Data -> @-hash:(@_:K -> U32) -> @-eq:(@_:K -> @_:K -> Bool) -> @m:HMap<K, V> -> @+k:K -> @v:V -> HMap<K, V>

template HMap.get.go source · line 116 · raw

@-K:Data -> @-V:Data -> @-eq:(@_:K -> @_:K -> Bool) -> @+n:Nat -> @+mask:U32 -> @m:HMap<K, V> -> @+hash:U32 -> @+k:K -> Maybe<&2, V>

template HMap.get source · line 142 · raw

@-K:Data -> @-V:Data -> @-hash:(@_:K -> U32) -> @-eq:(@_:K -> @_:K -> Bool) -> @m:HMap<K, V> -> @+k:K -> Maybe<&2, V>

template HMap.del.go source · line 172 · raw

@-K:Data -> @-V:Data -> @-eq:(@_:K -> @_:K -> Bool) -> @+n:Nat -> @+mask:U32 -> @m:HMap<K, V> -> @+hash:U32 -> @+k:K -> HMap<K, V>

template HMap.del source · line 198 · raw

@-K:Data -> @-V:Data -> @-hash:(@_:K -> U32) -> @-eq:(@_:K -> @_:K -> Bool) -> @m:HMap<K, V> -> @+k:K -> HMap<K, V>