Is there a better way of defining custom calendars?
If you need to check for holidays repeatedly, I would go for Set and flatten pattern matching blocks for readability:

let holidays = set [ 1, 3; 1, 4; 1, 5; 1, 6; 1, 7; 1, 10 // month, day
                     2, 23
                     3, 7; 3, 8
                     5, 2; 5, 9
                     6, 13
                     11, 4
                    ]

let private isHoliday2011 (dt: DateTime) =
  match dt.DayOfWeek, dt.Month, dt.Day with
  | DayOfWeek.Saturday, m, d | DayOfWeek.Sunday, m, d -&gt; m &lt;&gt; 3 || d &lt;&gt; 5    
  | _, m, d -&gt; Set.contains (m, d) holidays