anchor.diff:              windowedToFreshConsTail cons2 windowSize (i - 1) list.Tail
   
       let windowed windowSize (list: 'T list) =
  -        if windowSize <= 0 then invalidArg "windowSize" (SR.GetString(SR.inputMustBePositive))
  +        if windowSize <= 0 then invalidArgFmt "windowSize" "{0}\nwindowSize = {1}" [|SR.GetString SR.inputMustBePositive; windowSize|]
           let len = list.Length
           if windowSize > len then
               []
  
positive.code:             l
          else
          match l with
          | [] -> raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements))
          | x :: xs ->
                  let cons2 = freshConsNoTail x
                  setFreshConsTail cons cons2
                  splitAtFreshConsTail cons2 (index - 1) xs
   
      let splitAt index l =
          if index < 0 then invalidArg "index" (SR.GetString(SR.inputMustBeNonNegative))            
          if index = 0 then [], l else
          match l with
          | []  -> raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements))
          | [_] -> if index = 1 then l, [] else raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements))
          | x::xs ->
              if index = 1 then [x], xs else
              let cons = freshConsNoTail x
  
negative.code:             let cons2 = freshConsNoTail (f.Invoke(n,h1,h2))
              setFreshConsTail cons cons2
              mapi2ToFreshConsTail (n + 1) cons2 f t1 t2
          | [],xs2 -> 
              invalidArgFmt "list1" 
                  "{0}\nlist1 is {1} elements shorter than list2" 
                  [|SR.GetString SR.listsHadDifferentLengths; xs2.Length|]
          | xs1,[] -> 
              invalidArgFmt "list2" 
                  "{0}\nlist2 is {1} elements shorter than list1" 
                  [|SR.GetString SR.listsHadDifferentLengths; xs1.Length|]
  
      let mapi2 f xs1 xs2 = 
          match xs1,xs2 with
  