If functions are higher order then the distinction between plain functions and closures is retained (unless you treat all functions as closures). This is because the data needs to be passed around in the function pointer. If not higher order then yes, they desugar
Implementing these things is maybe easy for you ;) but for myself, doing it well, I would definitely not describe as a walk in the park