anchor.diff:  
       /// Parse some of the arguments given by 'argv', starting at the given position
       [<System.Obsolete("This method should not be used directly as it will be removed in a future revision of this library")>]
  -    static member ParsePartial(cursor,argv,argSpecs:seq<ArgInfo>,?other,?usageText) =
  +    static member private ParsePartial (cursor, argv, argSpecs : seq<ArgInfo>, ?other, ?usageText) =
           let other = defaultArg other (fun _ -> ())
           let usageText = defaultArg usageText ""
  -        let nargs = Array.length argv 
  -        incr cursor;
  -        let argSpecs = argSpecs |> Seq.toList
  -        let specs = argSpecs |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType)
  +        let nargs = Array.length argv
  +        incr cursor
  +        let argSpecs = Seq.toList argSpecs
  +        let specs =
  +            argSpecs
  +            |> List.map (fun (arg : ArgInfo) ->
  +                arg.Name, arg.ArgType)
  +
           while !cursor < nargs do
  -          let arg = argv.[!cursor] 
  -          let rec findMatchingArg args = 
  -            match args with
  -            | ((s, action) :: _) when s = arg -> 
  -               let getSecondArg () = 
  -                   if !cursor + 1 >= nargs then 
  -                     raise(Bad("option "+s+" needs an argument.\n"+getUsage argSpecs usageText));
  -                   argv.[!cursor+1] 
  +            let arg = argv.[!cursor]
  +            let rec findMatchingArg args =
  +                match args with
  +                | [] ->
  +                    if arg = "-help" || arg = "--help" || arg = "/help" || arg = "/help" || arg = "/?" then
  +                        raise <| HelpText (getUsage argSpecs usageText)
  +                    // Note: for '/abc/def' does not count as an argument
  +                    // Note: '/abc' does
  +                    elif arg.Length > 0 && (arg.[0] = '-' || (arg.[0] = '/' && not (arg.Length > 1 && arg.[1..].Contains "/"))) then
  +                        raise <| Bad ("unrecognized argument: "+ arg + "\n" + getUsage argSpecs usageText)
  +                    else
  +                       other arg
  +                       incr cursor
  +
  +                | ((s, action) :: _) when s = arg ->
  +                    let getSecondArg () =
  +                        if !cursor + 1 >= nargs then
  +                            let msg =
  +                                sprintf "option %s needs an argument." s
  +                                + System.Environment.NewLine
  +                                + getUsage argSpecs usageText
  +                            raise <| Bad msg
  +                        argv.[!cursor + 1]
                    
  -               match action with 
  -               | UnitArg f -> 
  -                 f (); 
  -                 incr cursor
  -               | SetArg f ->
  -                 f := true; 
  -                 incr cursor
  -               | ClearArg f -> 
  -                 f := false; 
  -                 incr cursor
  -               | StringArg f-> 
  -                 let arg2 = getSecondArg() 
  -                 f arg2; 
  -                 cursor := !cursor + 2
  -               | IntArg f -> 
  -                 let arg2 = getSecondArg () 
  -                 let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in  
  -                 f arg2;
  -                 cursor := !cursor + 2;
  -               | FloatArg f -> 
  -                 let arg2 = getSecondArg() 
  -                 let arg2 = try float arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in 
  -                 f arg2; 
  -                 cursor := !cursor + 2;
  -               | RestArg f -> 
  -                 incr cursor
  -                 while !cursor < nargs do
  -                     f argv.[!cursor]
  -                     incr cursor
  -
  -            | (_ :: more)  ->
  -                findMatchingArg more 
  -            | [] ->
  -                if arg = "-help" || arg = "--help" || arg = "/help" || arg = "/help" || arg = "/?" then
  -                    raise (HelpText (getUsage argSpecs usageText))
  -                // Note: for '/abc/def' does not count as an argument
  -                // Note: '/abc' does
  -                elif arg.Length > 0 && (arg.[0] = '-' || (arg.[0] = '/' && not (arg.Length > 1 && arg.[1..].Contains "/"))) then
  -                    raise <| Bad ("unrecognized argument: "+ arg + "\n" + getUsage argSpecs usageText)
  -                else 
  -                   other arg;
  -                   incr cursor
  -          findMatchingArg specs 
  +                    match action with
  +                    | UnitArg f ->
  +                         f ()
  +                         incr cursor
  +                    | SetArg f ->
  +                         f := true
  +                         incr cursor
  +                    | ClearArg f ->
  +                         f := false
  +                         incr cursor
  +                    | StringArg f ->
  +                         let arg2 = getSecondArg ()
  +                         f arg2
  +                         cursor := !cursor + 2
  +                    | IntArg f ->
  +                         let arg2 =
  +                            let arg2 = getSecondArg ()
  +                            try int32 arg2
  +                            with _ ->
  +                                raise <| Bad (getUsage argSpecs usageText)
  +                         f arg2
  +                         cursor := !cursor + 2
  +                    | FloatArg f ->
  +                         let arg2 =
  +                            let arg2 = getSecondArg ()
  +                            try float arg2
  +                            with _ ->
  +                                raise <| Bad (getUsage argSpecs usageText)
  +                         f arg2
  +                         cursor := !cursor + 2
  +                    | RestArg f ->
  +                        incr cursor
  +                        while !cursor < nargs do
  +                             f argv.[!cursor]
  +                             incr cursor
  +
  +                | (_ :: more) ->
  +                    findMatchingArg more
  +
  +            findMatchingArg specs
   
       /// Prints the help for each argument.
  -    static member Usage (specs,?usage) =
  +    static member Usage (specs, ?usage) =
           let usage = defaultArg usage ""
           System.Console.Error.WriteLine (getUsage (Seq.toList specs) usage)
   
  
positive.code:     static member Unit r = UnitArg r
  
  
  type ArgInfo (name,action,help) =
      /// Return the name of the argument
      member x.Name = name
      /// Return the argument type and action of the argument
  
negative.code: 
  (*  The code below is from the F# PowerPack and is only temporary --
      eventually it will be replaced with a new, functional-style API. *)
  
  #nowarn "44"    // Disable warnings from [<Obsolete>]
  
  /// The spec value describes the action of the argument,
  /// and whether it expects a following parameter.
  