anchor.diff:      printfn "  -oFILENAME, --output-file=FILENAME  Write result to FILENAME"
   
   
  -
  -let parsePos (positionString : string) =
  -    let m = Regex.Match(positionString, "([0-9]+):([0-9]+)")
  -    if m.Success then
  -        let line = Int32.Parse m.Groups.[1].Value
  -        let column = Int32.Parse m.Groups.[2].Value
  -        mkPos line (column-1)
  -    else raise (ArgumentException (sprintf "%s is not a valid position" positionString))
  -
   let parsePosition (positionString : string) =
       let m = Regex.Match(positionString, "([0-9]+):([0-9]+)")
       if m.Success then
  
positive.code: let parseExtractFunctionArguments (args : string list) =
      match List.length args with
          | 0 | 1 | 2 -> raise (ArgumentException "Too few arguments")
          | 3 -> ((parsePos args.[0], parsePos args.[1]), args.[2], None)
          | 4 -> ((parsePos args.[0], parsePos args.[1]), args.[2], Some args.[3])
          | _ -> raise (ArgumentException "Too many arguments")
  
  let parseAddArgumentArguments (args : string list) =
  
negative.code:             (Rename.GetErrorMessage (Some position, Some newName) source "test.fs").Value
          raise (RefactoringFailure errorMessage)
  
  let ExtractFunction filename range functionName =
      let source = getSource filename
      if ExtractFunction.IsValid (Some range, Some functionName) source "test.fs" then
          ExtractFunction.Transform (range, functionName) source "test.fs"
      else
          let errorMessage =
              (ExtractFunction.GetErrorMessage (Some range, Some functionName) source "test.fs").Value
          raise (RefactoringFailure errorMessage)
  
  let AddArgument filename position argumentName defaultValue =
      let source = getSource filename
  