 
   let deduplicatedSeguesWithInfo = seguesWithInfo
     .groupBy { segue, sourceType, destinationType in
-      "\(segue.identifier)|\(segue.type.hashValue)|\(sourceType.hashValue)|\(destinationType.hashValue)"
+      "\(segue.identifier)|\(segue.type)|\(sourceType)|\(destinationType)"
     }
     .values
     .flatMap { $0.first }

  for duplicate in groupedSeguesWithInfo.duplicates {
    let anySegueWithInfo = duplicate.first!
    let names = duplicate.map { $0.segue.identifier }.sort().joinWithSeparator(", ")
    warn("Skipping \(duplicate.count) segues for '\(anySegueWithInfo.sourceType.fullyQualifiedName)' because symbol '\(sanitizedSwiftName(anySegueWithInfo.segue.identifier))' would be generated for all of these segues, but with a different destination or segue type: \(names)")
  }

  let structs = groupedSeguesWithInfo.uniques

      let vars = seguesWithInfoForSourceType.map { segueWithInfo -> Var in
        let type = Type(
          name: "StoryboardSegue",
          genericArgs: [segueWithInfo.segue.type.description, segueWithInfo.sourceType.description, segueWithInfo.destinationType.description],
          optional: false
        )
        return Var(
