public function aggregate(callable $function)
{
$hasValue = false;
$aggregateValue = null;
foreach ($this->elements as $value) {
if (!$hasValue) {
$aggregateValue = $value;
$hasValue = true;
continue;
}
$aggregateValue = $function($aggregateValue, $value);
}
return $aggregateValue;
}