public function merge(Period $arg)
{
$reducer = function (Period $carry, Period $period) {
if ($carry->getStartDate() > $period->getStartDate()) {
$carry = $carry->startingOn($period->getStartDate());
}
if ($carry->getEndDate() < $period->getEndDate()) {
$carry = $carry->endingOn($period->getEndDate());
}
return $carry;
};
return array_reduce(func_get_args(), $reducer, $this);
}