I think your code change is good. I think it is more `fold` then `unfold` aka anamorphism. Maybe `ana` is a good name or perhaps `downThenUp`. My imagination fades away at this point.

However, I think a mapping version might be appropriate alongside:

    def anaMap[B](f: A => B)(implicit m: Monoid[B]): DObject[B] =
      reduceOption((a1, a2) => m.append(f(a1), f(a2))) map (_ getOrElse m.zero)