2 % (c) The GRASP/AQUA Project, Glasgow University, 1998
4 \section[TypeRep]{Type - friends' interface}
8 Type(..), TyNote(..), PredType(..), UsageAnn(..), -- Representation visible to friends
10 Kind, ThetaType, RhoType, TauType, SigmaType, -- Synonyms
13 superKind, superBoxity, -- KX and BX respectively
14 boxedBoxity, unboxedBoxity, -- :: BX
16 typeCon, -- :: BX -> KX
17 boxedTypeKind, unboxedTypeKind, openTypeKind, -- :: KX
18 mkArrowKind, mkArrowKinds, -- :: KX -> KX -> KX
23 #include "HsVersions.h"
26 import Var ( TyVar, UVar )
30 import Name ( Name, Provenance(..), ExportFlag(..),
31 mkWiredInTyConName, mkGlobalName, mkKindOccFS, tcName,
33 import OccName ( mkOccFS, tcName )
34 import TyCon ( TyCon, KindCon,
35 mkFunTyCon, mkKindCon, mkSuperKindCon,
37 import Class ( Class )
40 import SrcLoc ( mkBuiltinSrcLoc )
41 import PrelNames ( pREL_GHC, kindConKey, boxityConKey, boxedConKey, unboxedConKey,
42 typeConKey, anyBoxConKey, funTyConKey
46 %************************************************************************
48 \subsection{Type Classifications}
50 %************************************************************************
54 *unboxed* iff its representation is other than a pointer
55 Unboxed types cannot instantiate a type variable.
56 Unboxed types are always unlifted.
58 *lifted* A type is lifted iff it has bottom as an element.
59 Closures always have lifted types: i.e. any
60 let-bound identifier in Core must have a lifted
61 type. Operationally, a lifted object is one that
63 (NOTE: previously "pointed").
65 *algebraic* A type with one or more constructors, whether declared
66 with "data" or "newtype".
67 An algebraic type is one that can be deconstructed
68 with a case expression.
69 *NOT* the same as lifted types, because we also
70 include unboxed tuples in this classification.
72 *data* A type declared with "data". Also boxed tuples.
74 *primitive* iff it is a built-in type that can't be expressed
77 Currently, all primitive types are unlifted, but that's not necessarily
78 the case. (E.g. Int could be primitive.)
80 Some primitive types are unboxed, such as Int#, whereas some are boxed
81 but unlifted (such as ByteArray#). The only primitive types that we
82 classify as algebraic are the unboxed tuples.
84 examples of type classifications:
86 Type primitive boxed lifted algebraic
87 -----------------------------------------------------------------------------
89 ByteArray# Yes Yes No No
90 (# a, b #) Yes No No Yes
91 ( a, b ) No Yes Yes Yes
94 %************************************************************************
96 \subsection{The data type}
98 %************************************************************************
102 type SuperKind = Type
105 type TyVarSubst = TyVarEnv Type
111 Type -- Function is *not* a TyConApp
114 | TyConApp -- Application of a TyCon
115 TyCon -- *Invariant* saturated appliations of FunTyCon and
116 -- synonyms have their own constructors, below.
117 [Type] -- Might not be saturated.
119 | FunTy -- Special case of TyConApp: TyConApp FunTyCon [t1,t2]
123 | ForAllTy -- A polymorphic type
127 | PredTy -- A Haskell predicate
130 | NoteTy -- A type with a note attached
132 Type -- The expanded version
135 = SynNote Type -- The unexpanded version of the type synonym; always a TyConApp
136 | FTVNote TyVarSet -- The free type variables of the noted expression
137 | UsgNote UsageAnn -- The usage annotation at this node
138 | UsgForAll UVar -- Annotation variable binder
141 = UsOnce -- Used at most once
142 | UsMany -- Used possibly many times (no info; this annotation can be omitted)
143 | UsVar UVar -- Annotation is variable (unbound OK only inside analysis)
146 type ThetaType = [PredType]
149 type SigmaType = Type
153 -------------------------------------
156 Consider these examples:
157 f :: (Eq a) => a -> Int
158 g :: (?x :: Int -> Int) => a -> Int
159 h :: (r\l) => {r} => {l::Int | r}
161 Here the "Eq a" and "?x :: Int -> Int" and "r\l" are all called *predicates*
162 Predicates are represented inside GHC by PredType:
165 data PredType = Class Class [Type]
169 (We don't support TREX records yet, but the setup is designed
170 to expand to allow them.)
172 A Haskell qualified type, such as that for f,g,h above, is
174 * a FunTy for the double arrow
175 * with a PredTy as the function argument
177 The predicate really does turn into a real extra argument to the
178 function. If the argument has type (PredTy p) then the predicate p is
179 represented by evidence (a dictionary, for example, of type (predRepTy p).
182 %************************************************************************
186 %************************************************************************
190 kind :: KX = kind -> kind
191 | Type boxity -- (Type *) is printed as just *
192 -- (Type #) is printed as just #
194 | OpenKind -- Can be boxed or unboxed
197 | kv -- A kind variable; *only* happens during kind checking
199 boxity :: BX = * -- Boxed
201 | bv -- A boxity variable; *only* happens during kind checking
203 There's a little subtyping at the kind level:
204 forall b. Type b <: OpenKind
206 That is, a type of kind (Type b) is OK in a context requiring an OpenKind
208 OpenKind, written '?', is used as the kind for certain type variables,
211 1. The universally quantified type variable(s) for special built-in
212 things like error :: forall (a::?). String -> a.
213 Here, the 'a' can be instantiated to a boxed or unboxed type.
215 2. Kind '?' is also used when the typechecker needs to create a fresh
216 type variable, one that may very well later be unified with a type.
217 For example, suppose f::a, and we see an application (f x). Then a
218 must be a function type, so we unify a with (b->c). But what kind
219 are b and c? They can be boxed or unboxed types, so we give them kind '?'.
221 When the type checker generalises over a bunch of type variables, it
222 makes any that still have kind '?' into kind '*'. So kind '?' is never
223 present in an inferred type.
227 mk_kind_name key str = mkGlobalName key pREL_GHC (mkKindOccFS tcName str)
228 (LocalDef mkBuiltinSrcLoc NotExported)
229 -- mk_kind_name is a bit of a hack
230 -- The LocalDef means that we print the name without
231 -- a qualifier, which is what we want for these kinds.
232 -- It's used for both Kinds and Boxities
235 ------------------------------------------
236 Define KX, the type of a kind
237 BX, the type of a boxity
240 superKind :: SuperKind -- KX, the type of all kinds
241 superKindName = mk_kind_name kindConKey SLIT("KX")
242 superKind = TyConApp (mkSuperKindCon superKindName) []
244 superBoxity :: SuperKind -- BX, the type of all boxities
245 superBoxityName = mk_kind_name boxityConKey SLIT("BX")
246 superBoxity = TyConApp (mkSuperKindCon superBoxityName) []
249 ------------------------------------------
250 Define boxities: @*@ and @#@
253 boxedBoxity, unboxedBoxity :: Kind -- :: BX
255 boxedConName = mk_kind_name boxedConKey SLIT("*")
256 boxedBoxity = TyConApp (mkKindCon boxedConName superBoxity) []
258 unboxedConName = mk_kind_name unboxedConKey SLIT("#")
259 unboxedBoxity = TyConApp (mkKindCon unboxedConName superBoxity) []
262 ------------------------------------------
263 Define kinds: Type, Type *, Type #, and OpenKind
266 typeCon :: KindCon -- :: BX -> KX
267 typeConName = mk_kind_name typeConKey SLIT("Type")
268 typeCon = mkKindCon typeConName (superBoxity `FunTy` superKind)
270 boxedTypeKind, unboxedTypeKind, openTypeKind :: Kind -- Of superkind superKind
272 boxedTypeKind = TyConApp typeCon [boxedBoxity]
273 unboxedTypeKind = TyConApp typeCon [unboxedBoxity]
275 openKindConName = mk_kind_name anyBoxConKey SLIT("?")
276 openKindCon = mkKindCon openKindConName superKind
277 openTypeKind = TyConApp openKindCon []
280 ------------------------------------------
284 mkArrowKind :: Kind -> Kind -> Kind
285 mkArrowKind k1 k2 = k1 `FunTy` k2
287 mkArrowKinds :: [Kind] -> Kind -> Kind
288 mkArrowKinds arg_kinds result_kind = foldr mkArrowKind result_kind arg_kinds
292 %************************************************************************
294 \subsection{Wired-in type constructors
296 %************************************************************************
298 We define a few wired-in type constructors here to avoid module knots
301 funTyConName = mkWiredInTyConName funTyConKey pREL_GHC (mkOccFS tcName SLIT("(->)")) funTyCon
302 funTyCon = mkFunTyCon funTyConName (mkArrowKinds [boxedTypeKind, boxedTypeKind] boxedTypeKind)