anchor.diff:                          | [var] -> sprintSingleVar var 
                           | tupledVars -> sprintf "(%s)" (tupledVars |> List.map sprintSingleVar |> String.concat ", "))
                   |> String.concat " "
  -            applyParens OP.Fun (sprintf "fun %s -> %s" sprintedVars (decompile (OP(0),OP.Non) body))
  +            applyParens OP.Fun (sprintf "fun %s -> %s" sprintedVars (decompile CC.Zero body))
           | EP.BinaryInfixCall((symbol, prec), lhs, rhs) -> //must come before Call pattern
               let lhsValue, rhsValue = decompile (prec,OP.Left) lhs, decompile (prec,OP.Right) rhs
               applyParens prec (sprintf "%s %s %s" lhsValue symbol rhsValue)
  
positive.code:         //we can't reduce any XXXSet expressions due to limitations of Expr.Eval()
          | P.VarSet(v, arg) ->
              //not sure what precedence should be, using precedence for < op
              applyParens OP.LessThanOp (sprintf "%s <- %s" v.Name (decompile (OP(0),OP.Non) arg)) 
          //extremely verbose
          | P.UnionCaseTest(target, uci) ->
              let ucMatch =
  
negative.code:         decompileArgs (OP.Application,OP.Non) " "
      and decompileSequencedArgs =
          decompileArgs (OP.Semicolon,OP.Non) "; "
      decompile CC.Zero expr
  
  //-----operator precedence updated April 2011 with bitwise ops-----
  //see OperatorPrecedenceedence.xlsx, not yet implemented.
  