RFC position code

This is a stab at the position code. Any feedback welcome.

I need to at least clean it up and add more tests. Just want to make sure it's going down the right track.
I'd recommend
1) Check that bDays is nonEmpty
2) Define the method on a Calendar instance
3) Delegate to DateRange (because this code is quite envious of DateRange)
4) Add firstMonth & lastMonth to DateRange.
5) If the caller needs to do something if normalisation wasn't possible then use Option[Month] (because checking that the result is different to the input is awkward), if the caller doesn't need to do anything then drop 'IfPossible', because the caller doesn't care.

class Calendar {
  def normalise(dr: DateRange) = dr.normalise(isBusinessDay) 
}

class DateRange {
  def normalise(p: Day => Boolean): DateRange = {
     lazy val bDays = firstMonth.days.filter(p) // bit envious of Month, could add firstDay(p: Day => Boolean) & lastDay(p: Day => Boolean) to month.

    if (firstMonth == lastMonth && bDays.nonEmpty && firstDay <= bDays.head && lastDay >= bDays.last) firstMonth else this
  }

  def firstMonth = firstDay.containingMonth
  def lastMonth = lastDay.containingMonth
}


Just my 2 cents (okaaay, a bit more than 2).