https://www.prasetia.me/posts/compilation-reduce-function/