| 2869 | |
| 2870 | /** @internal */ |
| 2871 | export const equals = (self: AST, that: AST): boolean => { |
| 2872 | switch (self._tag) { |
| 2873 | case "Literal": |
| 2874 | return isLiteral(that) && that.literal === self.literal |
| 2875 | case "UniqueSymbol": |
| 2876 | return isUniqueSymbol(that) && that.symbol === self.symbol |
| 2877 | case "UndefinedKeyword": |
| 2878 | case "VoidKeyword": |
| 2879 | case "NeverKeyword": |
| 2880 | case "UnknownKeyword": |
| 2881 | case "AnyKeyword": |
| 2882 | case "StringKeyword": |
| 2883 | case "NumberKeyword": |
| 2884 | case "BooleanKeyword": |
| 2885 | case "BigIntKeyword": |
| 2886 | case "SymbolKeyword": |
| 2887 | case "ObjectKeyword": |
| 2888 | return that._tag === self._tag |
| 2889 | case "TemplateLiteral": |
| 2890 | return isTemplateLiteral(that) && that.head === self.head && equalsTemplateLiteralSpan(that.spans, self.spans) |
| 2891 | case "Enums": |
| 2892 | return isEnums(that) && equalsEnums(that.enums, self.enums) |
| 2893 | case "Union": |
| 2894 | return isUnion(that) && equalsUnion(self.types, that.types) |
| 2895 | case "Refinement": |
| 2896 | case "TupleType": |
| 2897 | case "TypeLiteral": |
| 2898 | case "Suspend": |
| 2899 | case "Transformation": |
| 2900 | case "Declaration": |
| 2901 | return self === that |
| 2902 | } |
| 2903 | } |
| 2904 | |
| 2905 | const equalsTemplateLiteralSpan = Arr.getEquivalence<TemplateLiteralSpan>((self, that): boolean => { |
| 2906 | return self.literal === that.literal && equals(self.type, that.type) |