Functors from first principle - explained with JS | Open Awesome