Nebenwirkungen wie Ausgabe oder Dateizugriff sind im Typ sichtbar: IO a beschreibt eine Aktion, die ein a liefert. In do-Blöcken führst du Aktionen nacheinander aus; mit <- holst du das Ergebnis, mit let bindest du reine Werte. Dahinter steckt das Konzept der Monade: eine Art, Berechnungen zu verketten (>>=). Auch Maybe und Either sind Monaden.
Der Vorteil: Reiner und unreiner Code sind sauber getrennt.
main :: IO ()
main = do
putStrLn "Wie heißt du?"
name <- getLine
let gruss = "Hallo " ++ name
putStrLn gruss
inhalt <- readFile "notiz.txt"
putStrLn (show (length (lines inhalt)) ++ " Zeilen")
-- Maybe als Monade: bricht bei Nothing ab
summe :: Maybe Int
summe = do
a <- Just 3
b <- Just 4
return (a + b) -- Just 7Merke
IO abeschreibt Aktionen mit Nebenwirkung<-holt das Ergebnis einer Aktion- Monaden verketten Berechnungen
Aufgabe
Lies zwei Zahlen ein und gib ihre Summe aus.