anchor.diff:                          let msg = sprintf "Unrecognized case name '%O.%s'" typeof<'Union> e.CaseName
                           raise <| FormatException msg
                       | tag -> caseDecoders.[tag] e.Payload
  -                
  +
                   member __.TryDecode e =
                       match labelIndex.TryFindIndex e.CaseName with
                       |  -1 -> None
  
positive.code:         let shape =
              match shapeof<'Union> with
              | Shape.FSharpUnion (:? ShapeFSharpUnion<'Union> as s) -> s
              | _ -> 
                  sprintf "Type '%O' is not an F# union" typeof<'Union>
                  |> invalidArg "Union"
  
  
negative.code: /// see the <a href="https://eiriktsarpalis.wordpress.com/2018/10/30/a-contract-pattern-for-schemaless-datastores">A Contract Pattern for Schemaless DataStores</a> blog article for an overview
  type IUnionContract = interface end
  
  /// Generic encoding abstraction for serializing/deserializing
  /// to a fixed format type, e.g. string, byte[], Newtonsoft JsonValue etc
  type IEncoder<'Format> =
      /// 'Null' format value to be used for union cases without a payload
  