coursera's functional principles assignments solved in clojure using typed-clojure