-isPragSig (SpecSig _ _ _) = True
-isPragSig (InlineSig _ _ _) = True
-isPragSig (NoInlineSig _ _ _) = True
-isPragSig (SpecInstSig _ _) = True
-isPragSig (DeprecSig _ _) = True
-isPragSig other = False
+isPragSig (SpecSig _ _) = True
+isPragSig (InlineSig _ _ _) = True
+isPragSig (SpecInstSig _) = True
+isPragSig other = False
+
+hsSigDoc (Sig _ _) = ptext SLIT("type signature")
+hsSigDoc (SpecSig _ _) = ptext SLIT("SPECIALISE pragma")
+hsSigDoc (InlineSig True _ _) = ptext SLIT("INLINE pragma")
+hsSigDoc (InlineSig False _ _) = ptext SLIT("NOINLINE pragma")
+hsSigDoc (SpecInstSig _) = ptext SLIT("SPECIALISE instance pragma")
+hsSigDoc (FixSig (FixitySig _ _)) = ptext SLIT("fixity declaration")
+\end{code}
+
+Signature equality is used when checking for duplicate signatures
+
+\begin{code}
+eqHsSig :: Sig Name -> Sig Name -> Bool
+eqHsSig (FixSig (FixitySig n1 _)) (FixSig (FixitySig n2 _)) = unLoc n1 == unLoc n2
+eqHsSig (Sig n1 _) (Sig n2 _) = unLoc n1 == unLoc n2
+eqHsSig (InlineSig b1 n1 _) (InlineSig b2 n2 _) = b1 == b2 && unLoc n1 == unLoc n2
+ -- For specialisations, we don't have equality over
+ -- HsType, so it's not convenient to spot duplicate
+ -- specialisations here. Check for this later, when we're in Type land
+eqHsSig _other1 _other2 = False