Пример #1
0
 /**
  * creates a generator that produces arrays whose elements
  * are chosen from $gen.
  *
  * @param Generator $gen
  * @return Generator
  */
 public static function arraysOf(self $gen)
 {
     $sized = self::sized(function ($s) {
         return self::choose(0, $s);
     });
     return $sized->bindGen(function (RoseTree $numRose) use($gen) {
         $seq = self::sequence(FP::repeat($numRose->getRoot(), $gen));
         return $seq->bindGen(function ($roses) {
             return self::pureGen(RoseTree::shrink(FP::args(), $roses));
         });
     });
 }