<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def broaden(self) -> 'List[Language]': """ Iterate through increasingly general versions of this parsed language tag. This isn't actually that useful for matching two arbitrary language tags against each other, but it is useful for matching them against a known standardized form, such as in the CLDR data. The list of broader versions to try appears in UTR 35, section 4.3, "Likely Subtags". nn-Latn-NO-x-thingy nn-Latn-NO nn-NO nn-Latn nn und-Latn und """

        if self._broader is not None:
            return self._broader
        self._broader = [self]
        seen = set(self.to_tag())
        for keyset in self.BROADER_KEYSETS:
            filtered = self._filter_attributes(keyset)
            tag = filtered.to_tag()
            if tag not in seen:
                self._broader.append(filtered)
                seen.add(tag)
        return self._broader