1) It's declarative. So if you are looking for a procedural language, you will be disappointed. It's also declarative for good reason IMHO.
2) It's still hacky. If the 'language' remained entirely declarative then the YAML syntax _might_ have been ok, but the language looks like a poor design stretched beyond it's limits.
Some people don't like the Ansible language for reason 1 or some for reason 2.
Personally, I prefer that it's declarative, the file is supposed to describe the features the target system must have, and then the module, which is procedural, has to figure out how to make that happen on whatever target system is in question.
That separation keeps things clean, idempotent (most times) and neat.
I think procedural approaches _seem_ better because they are familiar to programmers, but they can become complex, non-idempotent and hard to debug.