-: ?pair ( ? x -- {?,x}/f )
- over [ 2array ] [ 2drop f ] if ;
-
-: best-separator ( seq -- pos index )
- dup [ first ] map infimum '[ first _ = ] find nip first2 ;
-
-: first-subseq ( separators seq -- n separator )
- dupd [ swap [ subseq-start ] dip ?pair ] curry map-index sift
- [ drop f f ] [ best-separator rot nth ] if-empty ;
+: first-subseq ( seq separators -- n separator )
+ tuck
+ [ [ subsequence-starts ] dip 2array ] withd map-index sift-keys
+ [ drop f f ] [ [ first ] infimum-by first2 rot nth ] if-empty ;