anchor.diff:    let rawHtml = File.ReadAllText (scriptOutName + ".html")
   
     let html = XDocument.Parse ("<root>" + rawHtml + "</root>", LoadOptions.PreserveWhitespace)
  +  
  +  let changeLineNums ((_,(srcFile, snippet)), rawHtml) =
  +    match snippet with
  +    | SnippetWholeFile ->
  +      rawHtml
  +    | SnippetLinesBounded (sL, _) ->
  +      rawHtml
  +      |> splitStr """<span class="l">"""
  +      |> List.mapi (fun i s ->
  +        match (i,s) with
  +        | 0, _ -> s
  +        | _, Regex "^(\d+): ((?:.|\n)*)$" [Int32 line; rest] -> 
  +          sprintf "%d: %s" (sL + line - 1) rest
  +        | _, _ -> 
  +          failwithf "unexpected case: '%d' '%s'" i s)
  +      |> String.concat """<span class="l">"""
  +    | SnippetStartingWith _ ->
  +      failwith "SnippetStartingWith should not be present here"
  +  
     let snippets =
       html.Root.XPathSelectElements "table"
       |> Seq.map (fun x -> x.ToString(SaveOptions.DisableFormatting)
  
positive.code: | SnippetWholeFile
  | SnippetLinesBounded of startLine : int * endLine : int
  | SnippetStartingWith of start : string
  
  let snipId = function
  | file, SnippetWholeFile -> file
  
negative.code:     snippets
      |> List.indexed
      |> List.sortWith f
  
    let verboseTopLvlModule lines =
      match lines with
  