Is there a better way of defining custom calendars? I need to define custom calendars and, in particular, test a DateTime for being a holiday. My current code is shown below. Is there a more concise/better way of doing this, preferably without sacrificing performance?

let private isHoliday2011 (dt:DateTime) =
  match dt.DayOfWeek with
  | DayOfWeek.Saturday | DayOfWeek.Sunday -&gt;
    match (dt.Month, dt.Day) with
    | (3,5) -&gt; false
    | _ -&gt; true
  | _ -&gt;
    match dt.Month with
    | 1 -&gt;
      match dt.Day with
      | 3 | 4 | 5 | 6 | 7 | 10 -&gt; true
      | _ -&gt; false
    | 2 -&gt;
      match dt.Day with
      | 23 -&gt; true
      | _ -&gt; false
    | 3 -&gt;
      match dt.Day with
      | 7 | 8 -&gt; true
      | _ -&gt; false
    | 5 -&gt;
      match dt.Day with
      | 2 | 9 -&gt; true
      | _ -&gt; false
    | 6 -&gt;
      match dt.Day with
      | 13 -&gt; true
      | _ -&gt; false
    | 11 -&gt;
      match dt.Day with
      | 4 -&gt; true
      | _ -&gt; false
    | _ -&gt; false
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