anchor.diff:          |> Seq.filter (fun uc -> uc.Name = "Empty") 
           |> Seq.exactlyOne
       Reflection.FSharpValue.MakeUnion(uc, [||])
  +
  +let castToSting (s : obj)  =
  +    // used for hacks where reflection is not understood
  +    s :?> String
  +
  +
   
   let (<!>) (p: Parser<_,_>) label : Parser<_,_> =
       fun stream ->
  
positive.code:     pstring f.Name >>.pchar ':'
  
  and pfield (f: Reflection.PropertyInfo) =
      printfn "in field %O" f.PropertyType
      let castToSting (s : obj)  =
          s :?> String
  
      if FSharpType.IsOption f.PropertyType then
          //This is avery limited support for options, only string options are supported. 
          opt (pfieldName f>>.ptype (f.PropertyType.GenericTypeArguments |> Seq.exactlyOne)|>> castToSting)|>>box
  
negative.code: 
  and precord t =
      let makeType vals = 
          FSharpValue.MakeRecord(t,  vals)
  
      FSharpType.GetRecordFields (t)
  