Basically, move more processing inside the Either DownloadError so that context can be disregarded where it isn't relevant.
Either DownloadError
Also remove the list from downloadShare so that its caller can arrange for any desired concurrency, retries, etc.
downloadShare