-: find-nth ( seq quot n -- i elt )
- [ <enum> >alist ] 2dip -rot
- '[ _ [ second @ ] find-from rot drop swap 1 + ]
- [ f 0 ] 2dip times drop first2 ; inline
+: loopn-index ( ... pred: ( ... n -- ... ? ) n -- ... )
+ dup 0 > [
+ [ swap call ] [ 1 - ] 2bi
+ [ loopn-index ] 2curry when
+ ] [
+ 2drop
+ ] if ; inline recursive
+
+: loopn ( ... pred: ( ... -- ... ? ) n -- ... )
+ [ [ drop ] prepose ] dip loopn-index ; inline
+
+:: find-nth ( n seq quot -- i/f elt/f )
+ 0 t [
+ [ drop seq quot find-from ] dip 1 = [
+ over [ [ 1 + ] dip ] when
+ ] unless over >boolean
+ ] n loopn-index ; inline