public function inPartitions(callable $predicate, Collector $base = null): array
    {
        $collector = (null === $base) ? Collector::forList() : $base;
        return $this->with(
                function() use($collector)
                {
                    return [true  => $collector->fork(),
                            false => $collector->fork()
                    ];
                },
                function(&$partitions, $element, $key) use($predicate)
                {
                    $partitions[$predicate($element)]->accumulate($element, $key);
                },
                function($partitions)
                {
                    return [true  => $partitions[true]->finish(),
                            false => $partitions[false]->finish()
                    ];
                }
        );
    }