Haskell - Typen und Funktionen
Vordefinierte Typen
- Boole'scher Typ
Ausdrücke des Typs Bool können die Werte True und False annehmen.
- Listen
...werden mit Hilfe eckiger Klammern konstruiert:
Leere Liste []
Liste von Zeichen ['H','a','l','l','o']
- Zeichenketten
Strings sind Listen von Zeichen:
type String = [char]
- Tupel
...werden durch Komma getrennte Ausdrücke definiert:
(a,b,c)
Da das Komma den Konstruktor darstellt, erlaubt die Syntax von Haskell auch:
(,,) a b c
- Ein-/Ausgabe
Die I/O-Typen und entsprechenden Fehlertypen haben keine offengelegten Konstruktoren. Sie dienen der
Steuerung und Kontrolle von Ein- und Ausgabeoperationen.
Einige vordefinierte Klassen
- Die "Eq"-Klasse
...stellt Gleichheits- und Ungleichheitsmethoden zur Verfügung für alle
Typen ausser I/O.
- Die "Ord"-Klasse
...stellt Vergleichs- und Min-/Max-Methoden zur Verfügung für alle
Typen ausser Funktionen und I/O.
- Die "Read" und "Show"-Klassen
...stellt String-Konversionsroutinen für Werte aller Typen
zur Verfügung.
- Die "Enum"-Klasse
... definiert Operationen für geordnete Aufzählungstypen.
- Weitere ...
Numerische Typen und ihre Klassen
- maschinenabh„ngiger
Integer aus der Klasse "Integral"
Int aus der Klasse "Integral" mit fester Genauigkeit
Float ,Double aus der Klasse "RealFloat"
- Typen fr rationale und komplexe Zahlen...
Funktionen
-
Der Funktionstyp ist ein abstrakter Typ, dem nicht mit Hilfe eines
Konstruktors ein Wert zugewiesen werden kann.
Deklaration einer einfachen Funktion:
Beispiel für Addition:
add1 (a,b) = a + b -- ein Parametertupel
add2 a b = a + b -- zwei Parameter
Typsignatur
"Currying" (nach Haskell Curry)
Partielle Anwendung
- Mit Hilfe von "curried functions" können spezialisierte Adapter-Ausdrücke definiert werden,
die diese anwenden.
- Beispiel
mult :: Float->(Float->Float)
mult a b = a * b
Durch partielle Anwendung der "curried function" mult
kann die Verdopplungs-Funktion als spezielle Multiplikation implementiert werden:
doppel = mult 2 -- "Explizites Currying"
doppel 3 -- wird zu 6 ausgewertet
|