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
Entry@-K:Data -> @-V:Data -> @key:K -> @val:V -> Entry<K, V>
type HMap source · line 8 · raw
@-K:Data -> @-V:Data -> Data
HNil@-K:Data -> @-V:Data -> HMap<K, V>
HLeaf@-K:Data -> @-V:Data -> @hash:U32 -> @entries:List<&2, Entry<K, V>> -> HMap<K, V>
HBranch@-K:Data -> @-V:Data -> @lo:HMap<K, V> -> @hi:HMap<K, V> -> HMap<K, V>
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>