Another solution, just define a bunch of overloaded extension elements on Dictionary<'a,'b> :
open System.Collections.Generic type Dictionary<'a,'b> with member this.Add(x1,y1,x2,y2) = this.Add(x1,y1) this.Add(x2,y2) member this.Add(x1,y1,x2,y2,x3,y3) = this.Add(x1,y1,x2,y2) this.Add(x3,y3) member this.Add(x1,y1,x2,y2,x3,y3,x4,y4) = this.Add(x1,y1,x2,y2,x3,y3) this.Add(x4,y4) member this.Add(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5) = this.Add(x1,y1,x2,y2,x3,y3,x4,y4) this.Add(x5,y5) member this.Add(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6) = this.Add(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5) this.Add(x6,y6) //etc. let values = let d = Dictionary<_,obj>() d.Add("a", 1, "b", "foo", "c", true) d
Of course, the values here are not immutable as in your question, but I'm sure you could use the same strategy for this purpose.