anchor.diff:  
   (** <div style="display: none" > *)
   (*** define-output:Record-Clone ***)
  -let { Real = real''; Imaginary = imaginary''; } = complexNumber''
  -printf "real = %f | imaginary = %f" real'' imaginary'' 
  +let { Real = real'''; Imaginary = imaginary''; } = complexNumber''
  +printf "real = %f | imaginary = %f" real''' imaginary'' 
   (** </div> *)
   
   (*** include-output: Record-Clone ***)
  
positive.code: (**
  
  ---
  #### DU: Construction
  
  Für jeden Union Case gibt es eine Constructor Funktion
  
  
negative.code:     - Code kann nicht so dargestellt werden dass Fachleute es einsehen können
      
  ' Ohne dass sie kotzen
  
      
  ---
  ### DDD und FP
  #### Die Hoffnung
  
  - Design Dokumente die verifizierbar sind
      - Verifizierbar durch einsehen
      - Verifizierbar durch eine Maschine (Compiler)
  
  >"A good static type system is like having compile-time unit tests" (S. Wlaschin)
  
  ---
  ### DDD und FP
  #### Die Hoffnung
  
  - Code als Design Dokument
      - Das Code ist das Model: Keine Zwischenformate
      - Datenstrukturen und Verhalten (zum Teil) durch Datenstrukturen darstellen
      - Einbetten von Domainlogik in den Datenstrukturen
  
  >"Making illegal states unrepresentable" (Y. Minsky)
  
  ' - Die Fachleute können ihre Dokumente schreiben in den Formaten mit denen sie vertraut sind, die DEVs können Code schreiben
  ' - In FP sind sowohl Datenstrukturen (Tuple, Record, DU) als Verhalten (Function) Types: Composition.
  ' - Domainlogik legt Regeln fest die Definition (Vorname required) und Transformation Einkaufskorb -> Bestellung festlegen. Types erlauben diese Regeln zum Teil darzustellen, der Rest muss dann mit Controlflow Construkte erstellt werden
  ' - MISU!!! Vielleicht hier einen Diagram malen um das Vorgehen in OO und in FP darzustellen: Offener Raum, nachträgliches Einschränken.  Geschlossener Raum, Quadrat für Quadrat gebaut, nur legale Zustände werden dargestellt
  
  ---
  ### DDD und F#
  #### Vorteile des F# Typ System
  
  - Typ System begünstigt Komposition<!-- .element: class="fragment grow" -->
  - DU erlauben eine kompakte Darstellung von Zuständen
  
  ' - In C# oder in Java, ist die Hemmschwelle relativ hoch neue Types zu erstellen. Es gibt sogar das code smell "Primitive Obsession", kein Scherz
  ' - Komposition erlaubt es einfache Typen zu immer komplexeren zusammenzufassen.  Es ist erstaunlich wie viel dann auf einer Seite passt
  ' - Macht Nicht Programmierern weniger Angst
  ' - Bei Programmierung von Fachanwendungen, geht es oft darum dass ein Objekt mehrere Zustände haben kann.  Jedes Zustand hat wiederum eigne Operationen, Fähigkeiten. DU erlauben diese sehr gut darzustellen
  
  ---
  ### DDD und F#
  #### Vorteile des F# Typ System
  
  - Light-weight Typen: geringe Anzahl der Zeilen, Keine Sonderzeichen
  - Exhaustivness führt zur Korrektheit: Fehlende Fälle werden vom Compiler erfasst
  
  
  ' - Die geringe Zahl von Sonderzeichen/Schlüsselwörtern macht Nicht Programmierern weniger Angst
  ' - Bei Programmierung von Fachanwendungen, geht es oft darum dass ein Objekt mehrere Zustände haben kann.  Jedes Zustand hat wiederum eigne Operationen, Fähigkeiten. DU erlauben diese sehr gut darzustellen
  
  --- 
  ### DDD und F#
  