anchor.diff:                              let e = Specializations.FlaconOfGetHashCode<'e,'ghc5>.Instance.Ensorcel (iec, x.Item5)
                               eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) e)
   
  -                type TupleEREqualityComparer<'a,'b,'c,'d,'e,'f>() =
  -                    member __.Equals (_:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f>, y:System.Tuple<'a,'b,'c,'d,'e,'f>) = 
  -                        match x, y with
  -                        | null, null -> true
  -                        | null, _ | _, null -> false
  -                        | _, _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item1 y.Item1 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item2 y.Item2 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item3 y.Item3 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item4 y.Item4 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item5 y.Item5 with
  -                            | false -> false
  -                            | _ ->
  -                            GenericEqualityERIntrinsic_inline x.Item6 y.Item6
  -
  -                    member __.GetHashCode (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f>) =
  -                        let a = GenericHashWithComparerIntrinsic_inline iec x.Item1
  -                        let b = GenericHashWithComparerIntrinsic_inline iec x.Item2 
  -                        let c = GenericHashWithComparerIntrinsic_inline iec x.Item3
  -                        let d = GenericHashWithComparerIntrinsic_inline iec x.Item4 
  -                        let e = GenericHashWithComparerIntrinsic_inline iec x.Item5
  -                        let f = GenericHashWithComparerIntrinsic_inline iec x.Item6
  -                        eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth e f))
  -
  -                type TupleEREqualityComparer<'a,'b,'c,'d,'e,'f,'g>() =
  -                    member __.Equals (_:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g>, y:System.Tuple<'a,'b,'c,'d,'e,'f,'g>) = 
  -                        match x, y with
  -                        | null, null -> true
  -                        | null, _ | _, null -> false
  -                        | _, _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item1 y.Item1 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item2 y.Item2 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item3 y.Item3 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item4 y.Item4 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item5 y.Item5 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item6 y.Item6 with
  -                            | false -> false
  -                            | _ ->
  -                            GenericEqualityERIntrinsic_inline x.Item7 y.Item7
  -
  -                    member __.GetHashCode (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g>) =
  -                        let a = GenericHashWithComparerIntrinsic_inline iec x.Item1
  -                        let b = GenericHashWithComparerIntrinsic_inline iec x.Item2 
  -                        let c = GenericHashWithComparerIntrinsic_inline iec x.Item3
  -                        let d = GenericHashWithComparerIntrinsic_inline iec x.Item4 
  -                        let e = GenericHashWithComparerIntrinsic_inline iec x.Item5
  -                        let f = GenericHashWithComparerIntrinsic_inline iec x.Item6
  -                        let g = GenericHashWithComparerIntrinsic_inline iec x.Item7
  -                        eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth (cth e f) g))
  -
  -                type TupleEREqualityComparer<'a,'b,'c,'d,'e,'f,'g,'h>() =
  -                    member __.Equals (_:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>, y:System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>) = 
  -                        match x, y with
  -                        | null, null -> true
  -                        | null, _ | _, null -> false
  -                        | _, _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item1 y.Item1 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item2 y.Item2 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item3 y.Item3 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item4 y.Item4 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item5 y.Item5 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item6 y.Item6 with
  -                            | false -> false
  -                            | _ ->
  -                            match GenericEqualityERIntrinsic_inline x.Item7 y.Item7 with
  -                            | false -> false
  -                            | _ ->
  -                            GenericEqualityERIntrinsic_inline x.Rest y.Rest
  -
  -                    member __.GetHashCode (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>) =
  -                        let a = GenericHashWithComparerIntrinsic_inline iec x.Item1
  -                        let b = GenericHashWithComparerIntrinsic_inline iec x.Item2 
  -                        let c = GenericHashWithComparerIntrinsic_inline iec x.Item3
  -                        let d = GenericHashWithComparerIntrinsic_inline iec x.Item4 
  -                        let e = GenericHashWithComparerIntrinsic_inline iec x.Item5
  -                        let f = GenericHashWithComparerIntrinsic_inline iec x.Item6
  -                        let g = GenericHashWithComparerIntrinsic_inline iec x.Item7
  -                        let h = GenericHashWithComparerIntrinsic_inline iec x.Rest
  -                        eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth (cth e f) (cth g h)))
  -(*
  -                let makeTupleEqualityComparerDelegate (ty:Type) (types:array<Type>) (def:Type) =
  -                    let concrete = def.MakeGenericType types
  -                    let instance = Activator.CreateInstance concrete
  -                    box (Delegate.CreateDelegate (GenericSpecializeEquals.makeEqualsReturnType ty, instance, "Equals"))
  -
  -                let tuplesEquals (tyRelation:Type) (ty:Type) : obj =
  -                    match tyRelation with
  -                    | r when r.Equals typeof<EquivalenceRelation> ->
  -                        if ty.IsGenericType then
  -                            let tyDef = ty.GetGenericTypeDefinition ()
  -                            let tyDefArgs = ty.GetGenericArguments ()
  -                            if   tyDef.Equals typedefof<Tuple<_>>               then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_>>
  -                            elif tyDef.Equals typedefof<Tuple<_,_>>             then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_>>
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_>>           then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_>>
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_>>         then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_>>
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>>       then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_>>
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_>>     then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_>>
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_>>   then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_,_>>
  -                            elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_,_>> then makeTupleEqualityComparerDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_,_,_>>
  -                            else null
  -                        else null
  -                    | r when r.Equals typeof<PartialEquivalenceRelation> -> null
  -                    | _ ->
  -                        System.Console.WriteLine ("{0}", tyRelation)
  -                        raise (Exception "invalid logic")
  -
  -                let makeTupleGetHashCodeDelegate (ty:Type) (types:array<Type>) (def:Type) =
  -                    let concrete = def.MakeGenericType types
  -                    let instance = Activator.CreateInstance concrete
  -                    box (Delegate.CreateDelegate (GenericSpecializeHash.makeGetHashCodeReturnType ty, instance, "GetHashCode"))
  -
  -                let tuplesGetHashCode (ty:Type) : obj =
  -                    if ty.IsGenericType then
  -                        let tyDef = ty.GetGenericTypeDefinition ()
  -                        let tyDefArgs = ty.GetGenericArguments ()
  -                        if   tyDef.Equals typedefof<Tuple<_>>               then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_>>
  -                        elif tyDef.Equals typedefof<Tuple<_,_>>             then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_>>
  -                        elif tyDef.Equals typedefof<Tuple<_,_,_>>           then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_>>
  -                        elif tyDef.Equals typedefof<Tuple<_,_,_,_>>         then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_>>
  -                        elif tyDef.Equals typedefof<Tuple<_,_,_,_,_>>       then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_>>
  -                        elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_>>     then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_>>
  -                        elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_>>   then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_,_>>
  -                        elif tyDef.Equals typedefof<Tuple<_,_,_,_,_,_,_,_>> then makeTupleGetHashCodeDelegate ty tyDefArgs typedefof<TupleEREqualityComparer<_,_,_,_,_,_,_,_>>
  -                        else null
  -                    else null
  -*)
  +                [<Struct; NoComparison; NoEquality>]
  +                type TupleEssenceOfGetHashCode<'a,'b,'c,'d,'e,'f,
  +                                                 'ghc1,'ghc2,'ghc3,'ghc4,'ghc5,'ghc6
  +                                                    when 'ghc1 :> Specializations.IEssenceOfGetHashCode<'a> and 'ghc1 : (new : unit -> 'ghc1)
  +                                                     and 'ghc2 :> Specializations.IEssenceOfGetHashCode<'b> and 'ghc2 : (new : unit -> 'ghc2)
  +                                                     and 'ghc3 :> Specializations.IEssenceOfGetHashCode<'c> and 'ghc3 : (new : unit -> 'ghc3)
  +                                                     and 'ghc4 :> Specializations.IEssenceOfGetHashCode<'d> and 'ghc4 : (new : unit -> 'ghc4)
  +                                                     and 'ghc5 :> Specializations.IEssenceOfGetHashCode<'e> and 'ghc5 : (new : unit -> 'ghc5)
  +                                                     and 'ghc6 :> Specializations.IEssenceOfGetHashCode<'f> and 'ghc6 : (new : unit -> 'ghc6)
  +                                                                                                                                                > =
  +                    interface Specializations.IEssenceOfGetHashCode<System.Tuple<'a,'b,'c,'d,'e,'f>> with
  +                        member __.Ensorcel (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f>) =
  +                            let a = Specializations.FlaconOfGetHashCode<'a,'ghc1>.Instance.Ensorcel (iec, x.Item1)
  +                            let b = Specializations.FlaconOfGetHashCode<'b,'ghc2>.Instance.Ensorcel (iec, x.Item2) 
  +                            let c = Specializations.FlaconOfGetHashCode<'c,'ghc3>.Instance.Ensorcel (iec, x.Item3)
  +                            let d = Specializations.FlaconOfGetHashCode<'d,'ghc4>.Instance.Ensorcel (iec, x.Item4) 
  +                            let e = Specializations.FlaconOfGetHashCode<'e,'ghc5>.Instance.Ensorcel (iec, x.Item5)
  +                            let f = Specializations.FlaconOfGetHashCode<'f,'ghc6>.Instance.Ensorcel (iec, x.Item6)
  +                            eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth e f))
  +
  +                [<Struct; NoComparison; NoEquality>]
  +                type TupleEssenceOfGetHashCode<'a,'b,'c,'d,'e,'f,'g,
  +                                                 'ghc1,'ghc2,'ghc3,'ghc4,'ghc5,'ghc6,'ghc7
  +                                                    when 'ghc1 :> Specializations.IEssenceOfGetHashCode<'a> and 'ghc1 : (new : unit -> 'ghc1)
  +                                                     and 'ghc2 :> Specializations.IEssenceOfGetHashCode<'b> and 'ghc2 : (new : unit -> 'ghc2)
  +                                                     and 'ghc3 :> Specializations.IEssenceOfGetHashCode<'c> and 'ghc3 : (new : unit -> 'ghc3)
  +                                                     and 'ghc4 :> Specializations.IEssenceOfGetHashCode<'d> and 'ghc4 : (new : unit -> 'ghc4)
  +                                                     and 'ghc5 :> Specializations.IEssenceOfGetHashCode<'e> and 'ghc5 : (new : unit -> 'ghc5)
  +                                                     and 'ghc6 :> Specializations.IEssenceOfGetHashCode<'f> and 'ghc6 : (new : unit -> 'ghc6)
  +                                                     and 'ghc7 :> Specializations.IEssenceOfGetHashCode<'g> and 'ghc7 : (new : unit -> 'ghc7)
  +                                                                                                                                                > =
  +                    interface Specializations.IEssenceOfGetHashCode<System.Tuple<'a,'b,'c,'d,'e,'f,'g>> with
  +                        member __.Ensorcel (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g>) =
  +                            let a = Specializations.FlaconOfGetHashCode<'a,'ghc1>.Instance.Ensorcel (iec, x.Item1)
  +                            let b = Specializations.FlaconOfGetHashCode<'b,'ghc2>.Instance.Ensorcel (iec, x.Item2) 
  +                            let c = Specializations.FlaconOfGetHashCode<'c,'ghc3>.Instance.Ensorcel (iec, x.Item3)
  +                            let d = Specializations.FlaconOfGetHashCode<'d,'ghc4>.Instance.Ensorcel (iec, x.Item4) 
  +                            let e = Specializations.FlaconOfGetHashCode<'e,'ghc5>.Instance.Ensorcel (iec, x.Item5)
  +                            let f = Specializations.FlaconOfGetHashCode<'f,'ghc6>.Instance.Ensorcel (iec, x.Item6)
  +                            let g = Specializations.FlaconOfGetHashCode<'g,'ghc7>.Instance.Ensorcel (iec, x.Item7)
  +                            eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth (cth e f) g))
  +
  +                [<Struct; NoComparison; NoEquality>]
  +                type TupleEssenceOfGetHashCode<'a,'b,'c,'d,'e,'f,'g,'h,
  +                                                 'ghc1,'ghc2,'ghc3,'ghc4,'ghc5,'ghc6,'ghc7,'ghc8
  +                                                    when 'ghc1 :> Specializations.IEssenceOfGetHashCode<'a> and 'ghc1 : (new : unit -> 'ghc1)
  +                                                     and 'ghc2 :> Specializations.IEssenceOfGetHashCode<'b> and 'ghc2 : (new : unit -> 'ghc2)
  +                                                     and 'ghc3 :> Specializations.IEssenceOfGetHashCode<'c> and 'ghc3 : (new : unit -> 'ghc3)
  +                                                     and 'ghc4 :> Specializations.IEssenceOfGetHashCode<'d> and 'ghc4 : (new : unit -> 'ghc4)
  +                                                     and 'ghc5 :> Specializations.IEssenceOfGetHashCode<'e> and 'ghc5 : (new : unit -> 'ghc5)
  +                                                     and 'ghc6 :> Specializations.IEssenceOfGetHashCode<'f> and 'ghc6 : (new : unit -> 'ghc6)
  +                                                     and 'ghc7 :> Specializations.IEssenceOfGetHashCode<'g> and 'ghc7 : (new : unit -> 'ghc7)
  +                                                     and 'ghc8 :> Specializations.IEssenceOfGetHashCode<'h> and 'ghc8 : (new : unit -> 'ghc8)
  +                                                                                                                                                > =
  +                    interface Specializations.IEssenceOfGetHashCode<System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>> with
  +                        member __.Ensorcel (iec:IEqualityComparer, x:System.Tuple<'a,'b,'c,'d,'e,'f,'g,'h>) =
  +                            let a = Specializations.FlaconOfGetHashCode<'a,'ghc1>.Instance.Ensorcel (iec, x.Item1)
  +                            let b = Specializations.FlaconOfGetHashCode<'b,'ghc2>.Instance.Ensorcel (iec, x.Item2) 
  +                            let c = Specializations.FlaconOfGetHashCode<'c,'ghc3>.Instance.Ensorcel (iec, x.Item3)
  +                            let d = Specializations.FlaconOfGetHashCode<'d,'ghc4>.Instance.Ensorcel (iec, x.Item4) 
  +                            let e = Specializations.FlaconOfGetHashCode<'e,'ghc5>.Instance.Ensorcel (iec, x.Item5)
  +                            let f = Specializations.FlaconOfGetHashCode<'f,'ghc6>.Instance.Ensorcel (iec, x.Item6)
  +                            let g = Specializations.FlaconOfGetHashCode<'g,'ghc7>.Instance.Ensorcel (iec, x.Item7)
  +                            let h = Specializations.FlaconOfGetHashCode<'h,'ghc8>.Instance.Ensorcel (iec, x.Rest)
  +                            eliminate_tail_call_int (cth (cth (cth a b) (cth c d)) (cth (cth e f) (cth g h)))
                   
                   let getEssenceOfGetHashCodeType ty =
                       let x = typedefof<GenericSpecializeHash.Function<_>>
  
positive.code:                             | result -> result
                      takeFirst 0
  
              module GenericSpecializeCompareTo =
                  let makeCompareReturnType ty =
                      mos.makeGenericType<Func<_,_,_,_>> [| typeof<IComparer>; ty; ty; typeof<int> |]
  
negative.code:                                 | false -> false
                                  | _ ->
                                  Specializations.FlaconOfEquals<'c, 'eq3>.Instance.Ensorcel (ec, x.Item3, y.Item3)
  
                  [<Struct; NoComparison; NoEquality>]
                  type TupleEssenceOfEquals<'a,'b,'c,'d,
  