\begin{slide}{Die IO-Monade}

\begin{verbatim}
data IO -- abstract

readFile :: FilePath -> IO String
putStrLn :: String -> IO ()

instance Functor IO ; instance Monad IO
\end{verbatim}
  
Alle \glqq Funktionen\grqq, deren Resultat von der Außenwelt 
(Systemzustand) abhängt, haben Resultattyp \verb|IO ...|

Am Typ einer Funktion erkennt man ihre möglichen
(schädlichen) Wirkungen bzw. deren garantierte Abwesenheit.

Wegen der Monad-Instanz: benutze do-Notation
\begin{verbatim}
do cs <- readFile "foo.bar" ; putStrLn cs
\end{verbatim}
\end{slide}
