anchor.diff:  (**
   
   ---
  -### Option: Nutzung
  -
  -- Null vs Unbekannt/Fehlend
  -- Durch Option ist es möglich fehlende Werte explizit zu kennzeichnen
  -- Die Kennzeichnung erfolgt durch einen eigenen Typ
  -- Zugriffe auf fehlende Werte sind dann compile-time und keine run-time Fehler
  +### Option: Use
  +
  +- Null vs unknown/missing
  +- Option allows for an explicit designation of missing values
  +- Accessing missing values becomes a *compile-time* and not a *run-time* error 
   
   ' Referenzen auf nicht vorhandene Objekte sind nicht die beste Art und Weise 
   ' Code Analysis wird verwendet um Warnungen zu geben in C# 7.0.  Keine typ Unterstützung möglich wegen backward compatibility
  
positive.code: *)
  
  let s = Some "string"
  
  (**
  
  - Achtung: None wird nicht via Construction erstellt, sondern nur als Rückgabewert verwendet
  
  ---
  ### Option: Deconstruction und Pattern Matching
  
  - Alle Fälle müssen behandelt werden, damit ich den Wert des Option extrahieren kann
  
  *)
  
  let optionMatch s = 
      match s with 
      | Some wert -> sprintf "Wert ist %s" wert
      | None -> ""
  
  let z  = optionMatch (Some("Hello"))
  // Das nicht idiomatisch, nur für Demonstrationszwecke
  let z' = optionMatch None
  
  (**
  
  ' Achte darauf dass None hier den richtigen Typ hat, wegen des Aufruf an optionMatch: type Inference
  
  
  ---
  ### Option: Deconstruction und Pattern Matching
  - Option ist meistens das Ergebnis einer Auswertung
  - None stellt den Fall dar, dass kein sinnvolles Ergebnis vorhanden ist
  
  *)
  
  let matchForOption s = 
      match s with 
      | "Jawohl" -> Some(s)
      | _ -> None
  
  let x  = matchForOption "Jawohl"
  let x' = matchForOption "Doch nicht"
  
  (** <div style="display: none" > *)
  (*** define-output:Option-Deconstruction ***)
  
negative.code:         {
              string s2 = null;
              var len2 = s2.Length; 
              // We know that s2 equals null.  Not so the compiler
          }
      }
  
  