anchor.diff:      type Property = string
       
       type Expression = 
  -            | PropertyExprssion of Property * Expression
  +            | Property of Property * Expression
               | Not of Expression
  -            | BinaryExpression of LogicalOp * Expression * Expression
  -            | CompareExpression of CompareOp * Value
  +            | Binary of LogicalOp * Expression * Expression
  +            | Compare of CompareOp * Value
               | Empty
  -            
  -    type ContextOrValue = 
  -            | Context of Context
  -            | Value of Option<String>
   
       let private parseOp op : Op = match op with
           |"$not" -> Op.LogicalOp(LogicalOp.Not)
  
positive.code: 
      let nullProtect x = match x with |null -> None |_-> Some x;
  
      let (|Property|Operator|) (input:string) = if input.[0] = '$' then Operator else Property
  
      let private reducePredicate op seq = if Seq.isEmpty(seq) then true else seq |> Seq.reduce(op)               
  
  
negative.code: 
      let Match_ext_compile (schema: string) : (Func<ContextDelegate, bool>) =
          let json = (JsonValue.Parse(schema))
          let matcher = json|> parseJsonSchema |> CompileExpression "";
          new Func<ContextDelegate, bool>(fun c-> matcher (c.Invoke >> nullProtect))
  
      let Match (schema: JsonValue) (context: Context) : bool =
          context |> ( schema |> parseJsonSchema |> CompileExpression "")
      
      let Match_ext (schema: string) (context: ContextDelegate) : bool =
          Match (JsonValue.Parse(schema)) 
  