a small API to abstract HTTP calls using a free monad