-------------------------------------------------- -- IO Exceptions in Haskell -- -- userError :: String -> IOError -- ioError :: IOError -> IO a -- catch :: IO a -> (IOError -> IO a) -> IO a -- -------------------------------------------------- ------------------------------------------------ -- Einlesen und Aufsummieren von Zahlen -- -- mit Restriktion der Eingabe auf Zahlen <10 -- ------------------------------------------------ f :: Int -> IO Int f sum = do line <- getLine if null line then return sum else do let val = read line -- Ausnahmebehandlung: "raise exception" bei Eingabe >= 10 if val >= 10 then ioError (userError "Nur Zahlen <10 sind als Eingabe erlaubt!") -- Ende Ausnahmebehandlung else let newSum = val + sum in do putStrLn ("Summe: " ++ show newSum ++ '\n':"Naechste Zahl?") f newSum main :: IO () main = ( do putStrLn ("Erste Zahl?") erg <- f 0 putStrLn ("\nEndergebnis:" ++ show erg) ) -- Ausnahmebehandlung: Fehlermeldung ausgeben und Neustart `catch` (\ err -> do { putChar '\n' ; putStrLn (show err ++ " -> Restart!"); main } )