: sequence>hashtable ( seq map-quot insert-quot -- hashtable )
H{ } sequence>assoc ; inline
+: ?1array ( obj -- seq ) dup sequence? [ 1array ] unless ; inline
+
: expand-keys-set-at-as ( assoc exemplar -- hashtable' )
[
- [ swap dup sequence? [ 1array ] unless ]
+ [ swap ?1array ]
[ '[ _ set-at ] with each ]
] dip assoc>object ;
: expand-keys-push-at-as ( assoc exemplar -- hashtable' )
[
- [ swap dup sequence? [ 1array ] unless ]
+ [ swap ?1array ]
[ push-at-each ]
] dip assoc>object ;
: expand-keys-push-as ( assoc exemplar -- hashtable' )
[
- [ [ dup sequence? [ 1array ] unless ] dip ]
+ [ [ ?1array ] dip ]
[ '[ _ 2array _ push ] each ]
] dip assoc>object ;
: expand-values-set-at-as ( assoc exemplar -- hashtable' )
[
- [ dup sequence? [ 1array ] unless swap ]
+ [ ?1array swap ]
[ '[ _ _ set-at ] each ]
] dip assoc>object ;
: expand-values-push-at-as ( assoc exemplar -- hashtable' )
[
- [ dup sequence? [ 1array ] unless swap ]
+ [ ?1array swap ]
[ '[ _ _ push-at ] each ]
] dip assoc>object ;
: expand-values-push-as ( assoc exemplar -- assoc )
[
- [ dup sequence? [ 1array ] unless ]
+ [ ?1array ]
[ '[ 2array _ push ] with each ]
] dip assoc>object ;