Mukesh,
You need to write a generator function for the type (IntMap Index) which
keeps track of the n parameter that you're using in arbIndex.
You can't rely on the Arbitrary instance for (IntMap a) because it
doesn't have access to the n parameter that you are so controlling
in arbIndex.
(Actually, you could use the "size" number that QuickCheck keeps
behind the scenes, using the functions "sized" and "resize", but that
would have the consequence of affecting all other arbitrary values
generated as part of that recursion--including the floats and ints and
so on, which may or may not be what you want.)
Also, since your trees are unranked, rather than binary as in the paper
example, take care with the factor of 2 that you're using to resize the
generated subtrees. You might find that the resulting trees are still
much bigger than you want, or have different statistical properties.
Hope that helps--
Ezra