I asked an essentially identical question on the haskell-cafe list, and got an answer identical to @TeofilC’s approach. Works for me, and I would strongly support some text in the guide that covers this topic. Anyone care to propose an MR?
It is also I think worth pointing out that it is possible to write wrappers in the opposite direction, i.e. calling the function with visible type arguments from a context where a term of the type is available.