An exploration of Sudoku and computation in clojure using agents, monads, and whatever