Add the reader monad and associated tests