homeSoftwaredesign Softwaredesign: Parametrische Polymorphie Prof. Dr. Uwe Schmidt FH Wedel

Parametrische Polymorphie


weiter

Typ-Parameter

type Deklarationen und data Definitionen können mit Typparametern versehen werden.
Dadurch werden die Aliasnamen (type) und selbstdefinierten Typnamen (data) zu Typkonstruktoren
Funktionen über diesen parametrisierten Datentypen sind dann auch polymorph (vielgestaltig)
Diese Polymorphe wird parametrische Polymorphe genannt.
Typparameter entsprechen den Templates in C++ und den Generics in Java 1.5
Beispiel
explizite Definition von Listen
 
data List a = Nil
            | Cons a (List a)
vordefinierte parametrische Summentypen
Maybe
data Maybe t
  = Nothing
  | Just t
merke
Maybe t enthält einen Wert mehr als t
gut
Explizite Kennzeichnung, dass ein Wert nicht vorhanden ist.
schlecht
In OOP null-Referenz manchmal genutzt zur Darstellung von Nothing, ist aber nicht explizit in der Quelle sichtbar.
Konsequenz: NullPointerException
Anwendungen
type OptionalInt = Maybe Int
 
-- Werte
 
Nothing, Just 1, Just 2, ...
typische Verwendung
lookup :: key -> Map key val -> Maybe val
lookup k m
  | found k   = Just v
  | otherwise = Nothing
  where
  v  = ...
merke
Anwendung: Aus partiell definierten Funktionen total definierte machen
merke
Fehler durch Nothing repräsentieren
weiter
Either
entweder / oder
 
Summe zweier Wertebereiche
 
data Either a b
  = Left  a
  | Right b
Anwendungen
type IntOrError = Either Error Int
 
-- Werte
 
Left "division by zero"
Right 5
merke
Maybe und Either sind neue Typkonstruktoren wie [ ] und ( , ).

Letzte Änderung: 13.04.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel