anchor.diff:  
   *)
   
  -    type Contact'' = {
  -        Name: PersonalName
  -        EmailContactInfo:EmailContactInfo
  -    }
  -
  -
  -
  -
  -
  -
  +    type UnverifizierterKontakt = { Name: PersonenName; Email:Email; }
  +
  +    type VerifizierterKontakt = { Name: PersonenName; Email:VerifizierteEmail; }
  +
  +    type Kontakt' = 
  +        | UnverifizierterKontakt of UnverifizierterKontakt
  +        | VerifizierterKontakt of VerifizierterKontakt
  +
  +    let ``Funktion gilt nur für verifizierte ohne Prüfung`` verifizierterKontakt = 
  +        verifizierterKontakt.Email.Email
  +
  +(**
  +
  +---
  +### DDD und F#
  +#### Model für einen Kunden mit Adressen
  +
  +
  +
  +
  +' Das Pattern matching schränkt die Auswahl auf konkrete Typen und nicht mehr auf das abfragen von einzelnen Werten
  +' In OO wäre hier jetzt eine Implementierung des Visitor Pattern notwendig
  +' http://www.dofactory.com/net/visitor-design-pattern
  +' Je mehr Fälle man hat desto komplizierter wird das ganze
  +
  +*)
  +
  +    type Strasse = Strasse of string
  +    type PLZ = PLZ of string
  +    type Land = Land of string
  +
  +    type PostAnschrift = { Strasse:Strasse; PLZ:PLZ; Land:Land; }
  +
  +    type KontactInfo = 
  +        | VerifizierteEmail of VerifizierteEmail
  +        | PostAnschrift of PostAnschrift
  +
  +
  +    type Kontakt'' = 
  +        | UnverifizierterKontakt of UnverifizierterKontakt
  +        | VerifizierterKontakt of KontactInfo
  +
  +(**
  +
  +' Das gleiche Spiel mit der Verifikation kann ich jetzt auch mit der postalen Anschrift machen
  +
  +*)
  +
  +
  +
  +
  
positive.code:     - fsharpforfunandprofit
      - Jane Street (kein F#, OCaml)
  
  --- 
  ### DDD und F#
  #### Intern ODER extern
  *)
  
  type Abteilung = { Name:string; Beschreibung:string; }
  type Kunde = { Id:int; Name:string; }
  
  type Person' = { Id:int; Vorname:string; Nachname:string; Abteilung: Abteilung option; Kunde: Kunde option; }
  
  (**
  ' Theoretisch, hindert mich nichts daran sowohl Department und Customer leer zu lassen.  Ich muss aktiv über mein Code eingreifen um zu sichern dass mindestens eines der beiden belegt ist
  ' Nachnamen und Vornamen sind häufig gemeinsam anzutreffen, die Beiden werden meistens als einheit betrachtet
  ' Notfalls muss eine ReadOnly Property erstellen um herauszufinden dass eine Person intern oder extern ist
  ' Diese Property muss immer z.B. aufgerufen werden um sich zu vergewissern 
  
negative.code: ---
  ### Tuple: Construction
  
  - Kann beliebig viele Elemente beinhalten
  - Construction erolgt mittels Komma (mit und ohne Klammern)
  - Multiplikation von (mindestens) zwei Domains: Kartesiche Summe
  
  *)
  
  