Simplify the required class instances for method invocation
The only thing that really needs to be done per overload instance is a:
foreign import "dynamic" foo :: FunPtr t -> t
As these have to be declared top level without being too polymorphic as far as I know.
The result type can in practice be done once per method however, unless it's some obscure CLR language that allows overloading on the result type (the underlying intermediate language supports it but I doubt it is used).