AP
import Data.List (break)тоже работает, само собой
import Data.Bifunctor (bimap)
unlessNull _ [] = []
unlessNull f xs = f xs
untilDoThen cond l r = unlessNull (uncurry (<>) . bimap l r . break cond)
reverseWords = untilDoThen isSpace reverse keepSpaces
keepSpaces = untilDoThen (not . isSpace) id reverseWords
> reverseWords "asd 123 456"
"dsa 321 654"
