Motivation
|
(+) berechnet die Summe zweier Zahlen des gleichen Typs
|
? |
Typ von (+)
|
|
(+) :: Int -> Int -> Int
(+) :: Integer -> Integer -> Integer
(+) :: Double -> Double -> Double
(+) :: a -> a -> a
|
| |
Lösung
|
Typ-Klassen (kurz: Klassen)
|
Definition
|
Eine Typ-Klasse ist ein Name für eine Schnittstelle.
Eine Schnittstelle enthält eine Menge von Funktions-Deklarationen
|
Definition
|
Ein Typ ist eine Instanz einer Typ-Klasse,
wenn er die Funktionen der Schnittstelle implementiert.
|
Beispiel
|
Num ist eine Typ-Klasse, die die Funktionen (Operatoren)
(+), (-), (*), negate, abs, signum enthält
|
|
(+) :: Num a => a -> a -> a
|
Definition
|
Ein Typ, der eine Klassen-Einschränkung (class constraint) enthält,
ist ein überladener Typ
|
Elementare Klassen
|
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
class Eq a => Ord a where
compare :: a -> a -> Ordering
(<) :: a -> a -> Bool
(<=) :: a -> a -> Bool
(>) :: a -> a -> Bool
(>=) :: a -> a -> Bool
max :: a -> a -> a
min :: a -> a -> a
class Num a where
(+) :: a -> a -> a
(-) :: a -> a -> a
(*) :: a -> a -> a
negate :: a -> a
abs :: a -> a
signum :: a -> a
fromInteger :: Integer -> a
|
| |
|
Alle elementaren Typen (Bool, Char, Int, Integer, Float, Double, ...)
besitzen eine Instanz von Eq und Ord
|
|
Alle Listen-Typen, deren Element-Typ eine Instanz von Eq und Ord besitzt,
besitzen eine Instanz von Eq und Ord
|
|
Alle Tupel-Typen, deren Komponenten-Typen Instanzen von Eq und Ord besitzen,
besitzen eine Instanz von Eq und Ord
|
|
Funktions-Typen und Typen, die Funktions-Typen enthalten, besitzen
keine Instanz von Eq und Ord
|
| |
Ausgabe und Konversion in Strings
|
mit einer Typklasse Show
|
|
class Show a where
show :: a -> String
|
|
Alle Typen, deren Werte ausgegeben werden sollen, benötigen eine Instanz von Show
|
|
Alle elementaren Typen (Bool, Char, Int, Integer, Float, Double, ...)
besitzen eine Instanz von Show
|
|
Alle Listen-Typen, deren Element-Typ eine Instanz von Show besitzt,
besitzen eine Instanz von Show
|
|
Alle Tupel-Typen, deren Komponenten-Typen Instanzen von Show besitzen,
besitzen eine Instanz von Show
|
|
Funktions-Typen und Typen, die Funktions-Typen enthalten, besitzen
keine Instanz von Show
|
| |
Eingabe und Konversion aus Strings
|
mit einer Typklasse Read
|
|
read :: Read a => String -> a
|
|
Alle Typen, deren Werte aus Zeichenreihen (Strings) konstruiert werden sollen,
müssen eine Instanz von Read besitzen.
|
|
Alle elementaren Typen (Bool, Char, Int, Integer, Float, Double, ...)
besitzen eine Instanz von Read
|
|
Alle Listen-Typen, deren Element-Typ eine Instanz von Read besitzt,
besitzen eine Instanz von Read
|
|
Alle Tupel-Typen, deren Komponenten-Typen Instanzen von Read besitzen,
besitzen eine Instanz von Read
|
|
Funktions-Typen und Typen, die Funktions-Typen enthalten, besitzen
keine Instanz von Read
|