     @inlinable
     public static func == (lhs: GIRType, rhs: GIRType) -> Bool {
         return lhs.isAlias == rhs.isAlias && lhs.parent == rhs.parent && lhs.ctype == rhs.ctype
-            && lhs.name == rhs.name && lhs.swiftName == rhs.swiftName
+            && lhs.name == rhs.name && lhs.swiftName == rhs.swiftName && lhs.typeName == rhs.typeName
     }
 
     /// Hashes the essential components of this type by feeding them into the

    let maybeType = GIR.namedTypes[name]?.first { $0.ctype == info.innerType }
    let type = maybeType ?? GIRType(name: name, typeName: typeName, ctype: info.innerType)
    let t = addType(type)
    return TypeReference(type: t, isConst: info.isConst, isOptional: isOptional, constPointers: info.indirection)
}

/// Add a new type to the list of known types

    public init(name: String, swiftName: String? = nil, typeName: String? = nil, ctype: String, superType: TypeReference? = nil, isAlias: Bool = false, conversions: [GIRType : [TypeConversion]] = [:]) {
        precondition(isAlias == false || superType != nil)
        self.name = name
        self.swiftName = swiftName.map { $0.isEmpty ? name : $0 } ?? name
        self.typeName = typeName.map { $0.isEmpty ? ctype : $0 } ?? ctype
        self.ctype = ctype
        self.parent = superType
        self.isAlias = isAlias
