source written while learning from "learn you a haskell" and "real world haskell"