M: assoc assoc-like drop ;
+: ?at ( key assoc -- value/key ? )
+ dupd at* [ [ nip ] [ drop ] if ] keep ; inline
+
<PRIVATE
: (assoc-each) ( assoc quot -- seq quot' )
[ first = ] with find swap ; inline
: substituter ( assoc -- quot )
- [ dupd at* [ nip ] [ drop ] if ] curry ; inline
+ [ ?at drop ] curry ; inline
: with-assoc ( assoc quot: ( value key assoc -- ) -- quot: ( key value -- ) )
curry [ swap ] prepose ; inline
at* drop ; inline
: at-default ( key assoc -- value/key )
- 2dup at* [ 2nip ] [ 2drop ] if ; inline
+ ?at drop ; inline
M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
[ dup assoc-size ] dip new-assoc