
Hi all, I am trying to Network.HTTP to connect to a website and catch the error if the network is down. Here's what I have so far: data Errors = DocumentParseError | WebsiteUnreachableError | ISBNNotFoundError respHTML' :: ISBN -> IO (Either Errors (IO String)) respHTML' isbn = do rsp <- simpleHTTP (getRequest $ " http://isbndb.com/api/books.xml?results=details&access_key=" ++ key ++ "&index1=isbn&value1=" ++ isbn :: Request_String) return $ Right $ getResponseBody rsp `E.catch` (\(e :: E.SomeException ) -> return $ Left $ WebsiteUnreachableError) I get the following error when I load it into GHCI: Couldn't match expected type `[Char]' against inferred type `Either Errors b' Expected type: IO String Inferred type: IO (Either Errors b) In the expression: return $ Left $ WebsiteUnreachableError In the second argument of `E.catch', namely `(\ (e :: E.SomeException) -> return $ Left $ WebsiteUnreachableError)' Failed, modules loaded: none. Control.Exception.catch has the following signature : catch :: forall a. IO a -> (IOError -> IO a) -> IO a I would expect that the handler function needs to return an IO (Either Errors (IO String)). Why is it trying to return an IO String?