anchor.diff:  
       let mutable systemValueTupleException = null
   
  +    let loadSystemValueTuple = 
  +        lazy (
  +#if FX_ASSEMBLYLOADBYSTRING
  +            Assembly.Load("System.ValueTuple")
  +#else
  +            Assembly.Load(new AssemblyName("System.ValueTuple"))
  +#endif
  +        )
  +
       let reflectedValueTuple n =
  -        try        
  -#if FX_ASSEMBLYLOADBYSTRING
  -            let a = Assembly.Load("System.ValueTuple")
  -#else
  -            let a = Assembly.Load(new AssemblyName("System.ValueTuple"))
  -#endif
  +        try
  +            let a = loadSystemValueTuple.Value
               match n with
               | 1 -> Some (a.GetType("System.ValueTuple`1"))
               | 2 -> Some (a.GetType("System.ValueTuple`2"))
  
positive.code:             | None -> raise systemValueTupleException
          if isStruct then
              match tys.Length with 
              | 1 -> deOption(stuple1).MakeGenericType(tys)
              | 2 -> deOption(stuple2).MakeGenericType(tys)
              | 3 -> deOption(stuple3).MakeGenericType(tys)
              | 4 -> deOption(stuple4).MakeGenericType(tys)
              | 5 -> deOption(stuple5).MakeGenericType(tys)
              | 6 -> deOption(stuple6).MakeGenericType(tys)
              | 7 -> deOption(stuple7).MakeGenericType(tys)
              | n when n >= maxTuple -> 
                  let tysA = tys.[0..tupleEncField-1]
                  let tysB = tys.[maxTuple-1..]
                  let tyB = mkTupleType isStruct tysB
                  deOption(stuple8).MakeGenericType(Array.append tysA [| tyB |])
              | _ -> invalidArg "tys" (SR.GetString(SR.invalidTupleTypes))
          else
              match tys.Length with 
  
negative.code:         | Some v -> v
          | None -> Unchecked.defaultof<Type>
  
      let stuple1 = lazy (reflectedValueTupleType 1 [| typedefof<obj> |])
      let stuple2 = lazy (reflectedValueTupleType 2 [| typedefof<obj>; typedefof<obj> |])
      let stuple3 = lazy (reflectedValueTupleType 3 [| typedefof<obj>; typedefof<obj>; typedefof<obj> |])
      let stuple4 = lazy (reflectedValueTupleType 4 [| typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj> |])
      let stuple5 = lazy (reflectedValueTupleType 5 [| typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj> |])
      let stuple6 = lazy (reflectedValueTupleType 6 [| typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj> |])
      let stuple7 = lazy (reflectedValueTupleType 7 [| typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj> |])
      let stuple8 = lazy (reflectedValueTupleType 8 [| typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; typedefof<obj>; deOption(reflectedValueTuple 0) |])
  
      let structTupleEquivHeadTypes typ stuple =
          match stuple with
          | Some s -> equivHeadTypes typ s
          | None -> false
  
      let isStructTuple1Type typ = structTupleEquivHeadTypes typ stuple1.Value
      let isStructTuple2Type typ = structTupleEquivHeadTypes typ stuple2.Value
      let isStructTuple3Type typ = structTupleEquivHeadTypes typ stuple3.Value
      let isStructTuple4Type typ = structTupleEquivHeadTypes typ stuple4.Value
      let isStructTuple5Type typ = structTupleEquivHeadTypes typ stuple5.Value
      let isStructTuple6Type typ = structTupleEquivHeadTypes typ stuple6.Value
      let isStructTuple7Type typ = structTupleEquivHeadTypes typ stuple7.Value
      let isStructTuple8Type typ = structTupleEquivHeadTypes typ stuple8.Value
  
      let isTupleType typ = 
          let isRefTupleType = 
  