anchor.diff:          SyntaxFactory.MethodDeclaration(TypeSyntax.Bool, "Equals")
           |> addModifiers [|SyntaxKind.PublicKeyword|]
           |> addParameter parameterName info.GeneratedTypeSyntax
  +        |> assertValueIsInternedIfNeeded info info.ThisValueMemberAccess
  +        |> assertValueIsInternedIfNeeded info (info.ValueAccess parameter)
           |> addBodyStatement body
           
       let private makeEqualsUnderlying info =
  
positive.code:         |> addModifiers [|SyntaxKind.PublicKeyword; SyntaxKind.StaticKeyword|]
          |> addParameter "a" info.GeneratedTypeSyntax
          |> addParameter "b" info.GeneratedTypeSyntax
          |> addBodyStatement body
  
      let private makeEquals info =
  
negative.code: /// otherwise, false.
  /// </returns>"
  
      module private MemberAccess =
          let objectReferenceEquals = dottedMemberAccess' ["object"; "ReferenceEquals"]
          let debugAssert = dottedMemberAccess' ["Debug"; "Assert"]
          let stringIsInterned = dottedMemberAccess' ["string"; "IsInterned"]
          let runtimeHelpersGetHashCode = dottedMemberAccess' ["RuntimeHelpers"; "GetHashCode"]
  
      let private makeGetHashCode info =
          let returnGetHashCode =
              if internEnabled info then
                  // We can use the very fast GetHashCode that uses the reference address
                  ret (invocation MemberAccess.runtimeHelpersGetHashCode [|info.ThisValueMemberAccess|])
              else
                  // Need to call the real one
                  ret (getHashCode info.ThisValueMemberAccess)
  