next up previous contents
Next: Typen von Funktionen Up: Grundlegende Sprachelemente Previous: Lokale Definitionen

Typen

Ausdrücke bezeichnen Werte

(Auswertung eines Ausdrucks versucht, ihn auf seine einfachste äquivalente Form zu reduzieren, also z.B.

 3 + 4     => 7

abs(-2) => 2
)

und jeder Wert hat einen Typ, der wie folgt angegeben werden kann:

 3 :: Int

True :: Bool
abs :: Int -> Int

Solche Typdeklarationen kann der Programmierer explizit anschreiben, insbesondere bei der Einführung von Bezeichnern:

 pi   ::  Float

pi = 3.14
area :: Float -> Float
area x = pi * x * x

Er muß es aber nicht !

Trotzdem hat Haskell ein statisches Typsystem (= Typ steht zur Compile-Zeit, also vor der Auswertung, fest): Haskell betreibt neben Syntaxanalyse noch Typ-Inferenz, d.h. erschließt den Typ von Ausdrücken aus Teilen und weist den Ausdruck als fehlerhaft zurück, falls kein vernünftiger Typ gefunden werden kann.

Empfehlung: verwende Typ deklarationen

Es gibt die üblichen Basistypen wie

 Int, Float, Bool, Char

mit Elementen wie

 3, 3.14, True, 'A'

und Operationen wie

 +, *, .. , &&, ||, ..

und es gibt strukturierte Typen wie z.B. [Int] oder [Char] = Typen der Listen von Int- oder Char-Elemente mit Elementen wie [1,2,3], ['A', 'B', 'C'].

[] = leere Liste,

Operator ``:'' zum Anfügen eines Elements vorne:

 'A':['B','C']     ist     ['A','B','C']

und der Konkatenation ``++'':

 ['A'] ++ ['B','C']

ist das selbe wie oben.

Zusatz: [Char] ist dasselbe wie der Typ String, String-Elemente können wie üblich auch mit Anführungszeichen gebildet werden: "ABC"

$\Longrightarrow$ Mehr über

Basistypen $$ Report, Literatur
Listen $$ späteres Kapitel
benutzerdefinierte Typen $$ späteres Kapitel

Mit dem Hugs-Kommando ``:type'' kann man den Typ eines Ausdrucks erfragen:

 > :type 'A'

'A' :: Char
> :type "hallo"
"hallo" :: String

Das Ergebnis sieht aber manchmal anders aus als erwartet:

 > :type 3

3 :: Num a => a
> :type area
area :: Fractional a => a -> a

Ähnliches gilt für Meldungen bei Typfehlern!

und verweist auf einen weiteren wichtigen Aspekt von Haskells Typ-System:


next up previous contents
Next: Typen von Funktionen Up: Grundlegende Sprachelemente Previous: Lokale Definitionen
Ronald Blaschke
1998-04-19