anchor.diff:  ---
   ### Tuple: Construction
   
  -- Kann beliebig viele Elemente beinhalten                    
  -- Construction erolgt mittels Komma (mit und ohne Klammern)  
  -- Multiplikation von (mindestens) zwei Domains: Kartesiche Summe 
  +- Kann beliebig viele Elemente beinhalten
  +- Construction erolgt mittels Komma (mit und ohne Klammern)
  +- Multiplikation von (mindestens) zwei Domains: Kartesiche Summe
   
   *)
   
  
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: 
  *)
  
      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
  
  *)
  
  
  
  
  