More broadly, should work by the selected semantic unit (incl. paragraphs in text mode, and the relevant units in other modes). I.e., if a sentence is selected, then the notional "move-left" would move the selected sentence to before the preceding sentence; if a word is selected, then analogously, move the selected word to before the preceding word.
The solution is intended to be used in combination with expand-region https://github.com/magnars/expand-region.el
smart-shift is somewhat similar, but moves the selection by a character at a time.
transpose-words and transpose-sentences are also similar but require a negative argument to move "to the left"; and they are distinct functions, while I would like to have a single function that understands its context, i.e. whether a word, a sentence, etc. is selected.