Typklassen bisher

  • hierarchische Organisation

  • definieren Verhalten von Datenypen, wie Test auf Gleichheit, Anordnung, etc

  • ermöglichen überladene Funktionen

Definition von Typklassen class

  • Ein Typ a, der zur Klasse Eq gehört, muss Operationen der Gleichheit und Ungleichheit unterstützen, gemäß der vorgegebenen Typdeklaration
  • Definitionen von = und /= nur default definitions
  • Da = und /= durch wechselseitige Rekursion definiert sind, muss mindestens eine der beiden Operationen in der Deklaration einer Instanz von Eq definiert sein.

Bool als Instanz von Eq

data Bool = False | True  
  
instance Eq Bool where   
	False == False = True   
	True  == True  = True   
	    _ == _     = False  
  • Ungleichheit ist durch default definition in Eq geregelt
    • Gleichheit hier überschrieben
    • minimal vollständige Definition von Bool als Instanz von Eq

Nur mit data oder newtype definierte Datentypen können Typklassen zugeordnet werden

noch ein Beispiel

data Ampel = Rot | Gelb | Gruen  
  
instance Show Ampel where   
	show Rot   =Rot: Stop!”   
	show Gelb  =Gelb: Achtung!”   
	show Gruen =Gruen: Go!”  

Unterklassen von Klassen definieren

Beispiel: Ord als Unterklasse von Eq (unvollständig):

class (Eq a) => Ord a where   
	(...)   
	(<), (<=), (>), (>=) :: a -> a -> Bool   
	min, max             :: a -> a-> a   
	(...)  

The Ord Class

Abkürzung zu Typklassendeklarationen deriving

data Bool = False | True   
			deriving (Eq, Ord, Show, Read)  
  
data Ampel = Rot | Gelb | Gruen deriving Show  

Haskell : Show