anchor.diff:  #endif  
   
   
  +module internal DetailedExceptions =
  +    
  +    /// takes an argument, a formatting string, a param array to splice into the formatting string
  +    let inline internal invalidArgFmt (arg:string) (fmt:string) argArray =    
  +        let msg = System.String.Format (fmt,argArray)
  +        raise (new System.ArgumentException (msg,arg))
  +
  +    /// takes a formatting string and a param array to splice into the formatting string
  +    let inline internal invalidOpFmt (fmt:string) argArray =
  +        let msg = System.String.Format (fmt,argArray)
  +        raise (new System.InvalidOperationException(msg))
  +
  +open DetailedExceptions
  +
   module internal List = 
   
       let arrayZeroCreate (n:int) = (# "newarr !0" type ('T) n : 'T array #)
  
positive.code:     let rec takeFreshConsTail cons n l =
          if n = 0 then setFreshConsTail cons [] else
          match l with
          | [] -> raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements))
          | x::xs ->
              let cons2 = freshConsNoTail x
              setFreshConsTail cons cons2
              takeFreshConsTail cons2 (n - 1) xs
   
      let take n l =
          if n < 0 then invalidArg "count" LanguagePrimitives.ErrorStrings.InputMustBeNonNegativeString
          if n = 0 then [] else 
          match l with
          | [] -> raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements))
          | x::xs ->
              let cons = freshConsNoTail x
              takeFreshConsTail cons (n - 1) xs
  
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
  