Fast heterogeneous maps in Haskell