I recently had to create a dictionary which needed a multipart key like
let x = [(“naveen”,1),1;(“naveen”,1),2] |> Map.ofList
as expected only one item in the Map
val x : Map<(string * int),int> = map [((“naveen”, 1), 2)]
And the same in C#
The next step was to actually disassemble Tuple in reflector
The code implements IStructuralComparable.CompareTo and does the comparison for each item. This is one of the reasons why generics is cool.