I think your C++ example corresponds more to the following haskell type.
boo :: Map a b -> b -> a
since it nowhere mentions int. boo :: Map a b -> b -> a
since it nowhere mentions int. boo :: Map a b -> b -> Maybe a
since Haskell doesn't have null inhabiting every non-primitive type.Here, you can't just magic into existence or modify an unknown 'a' value.
boo :: Map a b -> b -> Set a
I'm not sure how you would conjure up just an 'a' in general.