public static IObservable <(K, Change <V>)> OnEntryChange <K, V>(this AtomHashMap <K, V> atom) =>
public static IObservable <HashMapPatch <K, V> > OnChange <K, V>(this AtomHashMap <K, V> atom) => Observable.FromEvent <HashMapPatch <K, V> >( add => atom.Change += new AtomHashMapChangeEvent <K, V>(add), remove => atom.Change -= new AtomHashMapChangeEvent <K, V>(remove));
public static IObservable <HashMapPatch <EqK, K, V> > OnChange <EqK, K, V>( this AtomHashMap <EqK, K, V> atom) where EqK : struct, Eq <K> => Observable.FromEvent <HashMapPatch <EqK, K, V> >( add => atom.Change += new AtomHashMapChangeEvent <EqK, K, V>(add), remove => atom.Change -= new AtomHashMapChangeEvent <EqK, K, V>(remove));
static STM() { state = AtomHashMap <EqLong, long, RefState>(); transaction = new AsyncLocal <Transaction>(); }