2 % (c) The AQUA Project, Glasgow University, 1996
4 \section[Kind]{The @Kind@ datatype}
8 Kind(..), -- Only visible to friends: TcKind
22 import Outputable ( Outputable(..) )
28 = TypeKind -- Any type (incl unboxed types)
29 | BoxedTypeKind -- Any boxed type
30 | UnboxedTypeKind -- Any unboxed type
34 mkArrowKind = ArrowKind
36 mkUnboxedTypeKind = UnboxedTypeKind
37 mkBoxedTypeKind = BoxedTypeKind
39 isSubKindOf :: Kind -> Kind -> Bool
41 BoxedTypeKind `isSubKindOf` TypeKind = True
42 UnboxedTypeKind `isSubKindOf` TypeKind = True
43 kind1 `isSubKindOf` kind2 = kind1 == kind2
45 resultKind :: Kind -> Kind -- Get result from arrow kind
46 resultKind (ArrowKind _ res_kind) = res_kind
47 resultKind other_kind = panic "resultKind"
49 argKind :: Kind -> Kind -- Get argument from arrow kind
50 argKind (ArrowKind arg_kind _) = arg_kind
51 argKind other_kind = panic "argKind"
57 instance Outputable Kind where
58 ppr sty kind = pprKind kind
60 pprKind TypeKind = ppStr "*"
61 pprKind BoxedTypeKind = ppStr "*b"
62 pprKind UnboxedTypeKind = ppStr "*u"
63 pprKind (ArrowKind k1 k2) = ppSep [pprKind_parend k1, ppStr "->", pprKind k2]
65 pprKind_parend k@(ArrowKind _ _) = ppBesides [ppLparen, pprKind k, ppRparen]
66 pprKind_parend k = pprKind k