anchor.diff:              map3ToFreshConsTail cons f t1 t2 t3
               cons
           | xs1,xs2,xs3 -> 
  -            invalidArgFmt "list1, list2, list3" 
  -                "{0}\n list1.Length = {1}, list2.Length = {2}, list3.Length = {3}" 
  -                [|SR.GetString SR.listsHadDifferentLengths; xs1.Length; xs2.Length; xs3.Length|]
  +            invalidArg3ListsDifferent "list1" "list2" "list3" xs1.Length xs2.Length xs3.Length 
   
       let rec mapi2ToFreshConsTail n cons (f:OptimizedClosures.FSharpFunc<_,_,_,_>) xs1 xs2 = 
           match xs1,xs2 with
  
positive.code:             let res = freshConsNoTail (h1,h2)
              zipToFreshConsTail res t1 t2
              res
          | [],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|]
  
      // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private
      // tail cons cells is permitted in carefully written library code.
  
negative.code:             setFreshConsTail cons cons2
              map3ToFreshConsTail cons2 f t1 t2 t3
          | xs1,xs2,xs3 -> 
              invalidArg3ListsDifferent "list1" "list2" "list3" xs1.Length xs2.Length xs3.Length 
  
      let map3 f xs1 xs2 xs3 = 
          match xs1,xs2,xs3 with
  