change to use either to handle failure; experimenting concurrency in haskell