
Hello, while reading over the source code of network[1], I noticed a use of 'throw' where I'd expect 'throwIO': import qualified Control.Exception as Exception catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a catchIO = Exception.catch -- Returns the first action from a list which does not throw an exception. -- If all the actions throw exceptions (and the list of actions is not empty), -- the last exception is thrown. firstSuccessful :: [IO a] -> IO a firstSuccessful [] = error "firstSuccessful: empty list" firstSuccessful (p:ps) = catchIO p $ \e -> case ps of [] -> Exception.throw e _ -> firstSuccessful ps ...so, is `throw` used properly in the code above, or should it rather be `throwIO`? [1]: http://hackage.haskell.org/packages/archive/network/2.3.1.0/doc/html/src/Net...