https://ocaml.codingforstudent.com/3-smart-strategies-to-haskell/