minByOption

trait Collection[A] {
  def minByOption[W](f: (A) => W): A
}

minByOption applies f to each element and returns the element that yields the smallest value wrapped with Some.

On empty collections minByOption returns None.