It is recommended that anyone making use of this function redefine
it with a more restrictive type signature to control the type of the
annotation (the second argument). Any redefinitions of this function
should add an INLINE pragma, to reduce the chance of incorrect
optimisations.