| 
       
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 
 
         | 
     
     
        | 
        Maybe t enthält einen Wert mehr als
				  t
         | 
     
     
        | 
       Explizite Kennzeichnung, dass ein Wert nicht vorhanden ist.
         | 
     
     
        | 
       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 
  
  
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  = ... 
 
         | 
     
     
        | 
       Anwendung: Aus partiell definierten Funktionen total definierte machen
         | 
     
     
        | 
       Fehler durch Nothing repräsentieren
  | 
  |  | 
     
     
       Either  | 
       entweder / oder
  | 
        | 
       Summe zweier Wertebereiche
  | 
        | 
       
data Either a b 
  = Left  a 
  | Right b 
 
         | 
     
     
       Anwendungen
  | 
       
type IntOrError = Either Error Int 
  
  
Left "division by zero" 
Right 5 
 
         | 
     
     
        | 
       Maybe und Either
sind neue Typkonstruktoren wie [ ] und ( , ).
         |