I now recall why we use `_FunctionGenerator`. This is to be able to create a function generator "bound" to an expression, and later use that expression as the first argument to the function. See https://github.com/geoalchemy/geoalchemy2/blob/master/geoalchemy2/elements.py#L8 and https://github.com/geoalchemy/geoalchemy2/blob/master/geoalchemy2/functions.py#L58. I didn't find a way to do that without using `_FunctionGenerator`.