Kapitel 10

Werbung
Programmieren in
Haskell
Ein- und Ausgaben
Der Typ IO
mit Hilfe des abstrakten Typs `IO val' werden Aktionen beschrieben,
die Ein- oder Ausgaben vornehmen. Allgemeiner: ..., die mit dem
Betriebssystem oder der Umgebung kommunizieren.
---------------------------------------------------------------------> data IO val
---------------------------------------------------------------------Ein Element vom Typ `IO val' beschreibt eine EA-Aktion, die einen
Wert vom Typ `val' zurückgibt.
Vordefinierte Ausgabefunktionen
> putChar
:: Char -> IO ()
> putStr
:: String -> IO ()
> print
:: (Show a) => a -> IO ()
•putChar gibt ein einzelnes Zeichen aus
•putStr gibt einen String aus
•print wendet erst die show-Funktion auf die Eingabe
an und gibt das Ergebnis aus
Vordefinierte Eingabefunktionen
> getChar
> getLine
:: IO Char
:: IO String
•getChar liest ein einzelnes Zeichen ein
•getLine liest einen String ein
Vordefinierte Operationen auf Dateien.
> type FilePath = String
>
> readFile
:: FilePath -> IO String
> writeFile :: FilePath -> String -> IO ()
> appendFile :: FilePath -> String -> IO ()
•readFile liest den Inhalt einer Datei ein und gibt
diesen als String zurueck
•writeFile schreibt einen String in eine Datei
•appendFile haengt einen String an eine Datei an
Verknüpfung von EA-Aktionen
> return
> (>>)
> (>>=)
:: a -> IO a
:: IO a -> IO b -> IO b
:: IO a -> (a -> IO b) -> IO b
•return verpackt einen Wert in den IO-Typ
•>> haengt zwei IO-Aktionen hintereinander
•>>= haengt zwei IO-Aktionen hintereinander
und uebergibt das Ergebnis der ersten an die
zweite
Beispiel
> askFor
> askFor s
>
> io1
> io1
>
>
:: String -> IO String
= putStr s >> getLine
:: IO ()
= askFor "filename: "
readFile file
putStr cnts
>>= \file ->
>>= \cnts ->
Syntaktischer Zucker:
do - Notation
> io = f
>>= \x ->
>
g x >> = \y ->
>
hy
ist gleichbedeutend mit
> io = do
>
x <- f
>
y <- g x
>
hy
Syntaktischer Zucker:
do - Notation
> askFor
> askFor s
>
> io1
> io1
>
>
:: String -> IO String
= putStr s >> getLine
:: IO ()
= askFor "filename: "
readFile file
putStr cnts
> io2
> io2
>
>
>
:: IO ()
= do
file <- askFor "filename: "
cnts <- readFile file
putStr cnts
>>= \file ->
>>= \cnts ->
Kommandozeilenparameter
getArgs :: IO [String]
getArgs liefert die Liste der
Kommandozeilenparameter
> import System
> main = do
>
args <- getArgs
>
cat args
> cat [] = return ()
> cat (f:fs) = do
>
cnts <- readFile f
>
putStr cnts
>
cat fs
Kompilieren mit dem
ghc
• ghc = Glasgow Haskell Compiler
• jedes Programm muss eine main-Funktion
enthalten. Diese wird beim Programmstart
aufgerufen
• Beispiel: ghc --make ea.lhs -o ea
• Aufruf: ./ea fileA fileB
Beispiel
Herunterladen