module Map =

    module private Kvp =

        open System.Collections.Generic

        let toTuple (kvp : KeyValuePair<_,_>) =
            kvp.Key, kvp.Value

    /// Concatenate all the input maps. Where there are duplicate input keys, 
    /// the last mapping is preserved.
    let concat maps = 
        maps
        |> Seq.concat
        |> Seq.map Kvp.toTuple
        |> Map.ofSeq

let map1 = [1,'a'; 2,'b'] |> Map.ofSeq
let map2 = [2,'c'; 3,'d'] |> Map.ofSeq

//  map [(1, 'a'); (2, 'c'); (3, 'd')]
Map.concat [|map1; map2|]