   [
     dup [ car ] curry -rot
     [
-      >r cdr r> cdr lmerge
+      [ cdr ] bi lmerge
     ] 2curry lazy-cons
   ] 2curry lazy-cons ;
 

  ] if ;

: lcomp ( list quot -- result )
  >r lcartesian-product* r> lmap ;

: lcomp* ( list guards quot -- result )
  >r >r lcartesian-product* r> [ lsubset ] each r> lmap ;

DEFER: lmerge



M: lazy-from-by cdr ( lazy-from-by -- cdr )
  [ lazy-from-by-n ] keep
  lazy-from-by-quot dup slip lfrom-by ;

M: lazy-from-by nil? ( lazy-from-by -- bool )
  drop f ;
