Purely abstract API cannot mix in HasText