simplified download using the maybe function
Used a monad transformer for the downloaders

This simplifies the implementation of the downloaders, all they
need to care about is returning a value or failing; the
transformer handles the rest
replaced an if with a guard call