{- --------------------------------------------------------------------------- Defines data type IdKind which tells of which kind an identifier is, e.g. a module identifier or a class identifier -} module IdKind(IdKind(..)) where data IdKind = Var | Arg | Method | TVar | Con | TCon | TSyn | TClass | TC | Modid | MethodInstance | MethodDefault | Field ordIdKind :: IdKind -> Int ordIdKind Var = 1 ordIdKind Arg = 1 ordIdKind Method = 1 ordIdKind TVar = 2 ordIdKind Con = 3 ordIdKind TCon = 4 ordIdKind TSyn = 4 ordIdKind TClass = 4 ordIdKind TC = 4 ordIdKind Modid = 5 ordIdKind MethodInstance = 6 ordIdKind MethodDefault = 7 ordIdKind Field = 8 instance Eq IdKind where a == b = ordIdKind a == ordIdKind b instance Ord IdKind where a <= b = ordIdKind a <= ordIdKind b a < b = ordIdKind a < ordIdKind b compare a b = compare (ordIdKind a) (ordIdKind b) instance Show IdKind where showsPrec d Var = ("Identifier"++) showsPrec d Arg = ("Argument"++) showsPrec d Method = ("Method"++) showsPrec d TVar = ("Typevar"++) showsPrec d Con = ("Constructor"++) showsPrec d TC = ("Type constructor/class"++) showsPrec d TCon = ("Type constructor"++) showsPrec d TSyn = ("Type synonym"++) showsPrec d TClass = ("Type class"++) showsPrec d Modid = ("Module identifier"++) showsPrec d MethodDefault = ("Default method"++) showsPrec d MethodInstance = ("Instance method"++) showsPrec d Field = ("Field"++)