-import Kind ( mkBoxedTypeKind, mkArrowKind )
-import Name ( mkWiredInTyConName, mkWiredInIdName )
-import TyCon ( mkDataTyCon, mkTupleTyCon, mkSynTyCon,
- TyCon, Arity
- )
-import BasicTypes ( Module, NewOrData(..), RecFlag(..) )
-import Type ( Type, mkTyConTy, mkTyConApp, mkSigmaTy, mkTyVarTys,
- mkFunTy, mkFunTys, splitTyConApp_maybe, splitAlgTyConApp_maybe,
- GenType(..), ThetaType, TauType )
-import TyVar ( GenTyVar, TyVar, tyVarKind, alphaTyVars, alphaTyVar, betaTyVar )
-import Lex ( mkTupNameStr )
-import Unique
-import Util ( assoc, panic )
-
-alpha_tyvar = [alphaTyVar]
-alpha_ty = [alphaTy]
-alpha_beta_tyvars = [alphaTyVar, betaTyVar]
-
-pcRecDataTyCon, pcNonRecDataTyCon, pcNonRecNewTyCon
- :: Unique{-TyConKey-} -> Module -> FAST_STRING
- -> [TyVar] -> [Id] -> TyCon
-
-pcRecDataTyCon = pc_tycon DataType Recursive
-pcNonRecDataTyCon = pc_tycon DataType NonRecursive
-pcNonRecNewTyCon = pc_tycon NewType NonRecursive
-
-pc_tycon new_or_data is_rec key mod str tyvars cons
- = tycon
- where
- tycon = mkDataTyCon name tycon_kind
- tyvars
- [] -- No context
- cons
- [] -- No derivings
- Nothing -- Not a dictionary
- new_or_data
- is_rec
-
- name = mkWiredInTyConName key mod str tycon
- tycon_kind = foldr (mkArrowKind . tyVarKind) mkBoxedTypeKind tyvars
-
-pcSynTyCon key mod str kind arity tyvars expansion
- = tycon
- where
- tycon = mkSynTyCon name kind arity tyvars expansion
- name = mkWiredInTyConName key mod str tycon
-
-pcDataCon :: Unique{-DataConKey-} -> Module -> FAST_STRING
- -> [TyVar] -> ThetaType -> [TauType] -> TyCon -> Id
-pcDataCon key mod str tyvars context arg_tys tycon
- = data_con
- where
- data_con = mkDataCon name
- [ NotMarkedStrict | a <- arg_tys ]
- [ {- no labelled fields -} ]
- tyvars context [] [] arg_tys tycon
- name = mkWiredInIdName key mod str data_con
-\end{code}
-
-%************************************************************************
-%* *
-\subsection[TysWiredIn-tuples]{The tuple types}
-%* *
-%************************************************************************
-
-\begin{code}
-tupleTyCon :: Arity -> TyCon
-tupleTyCon arity
- = tycon
- where
- tycon = mkTupleTyCon uniq name arity
- uniq = mkTupleTyConUnique arity
- name = mkWiredInTyConName uniq mod_name (mkTupNameStr arity) tycon
- mod_name | arity == 0 = pREL_BASE
- | otherwise = pREL_TUP
-
-tupleCon :: Arity -> Id
-tupleCon arity
- = tuple_con
- where
- tuple_con = mkTupleCon arity name ty
- uniq = mkTupleDataConUnique arity
- name = mkWiredInIdName uniq mod_name (mkTupNameStr arity) tuple_con
- mod_name | arity == 0 = pREL_BASE
- | otherwise = pREL_TUP
- ty = mkSigmaTy tyvars [] (mkFunTys tyvar_tys (mkTyConApp tycon tyvar_tys))
- tyvars = take arity alphaTyVars
- tyvar_tys = mkTyVarTys tyvars
- tycon = tupleTyCon arity
-
-unitTyCon = tupleTyCon 0
-pairTyCon = tupleTyCon 2
-
-unitDataCon = tupleCon 0
-pairDataCon = tupleCon 2
+import Constants ( mAX_TUPLE_SIZE )
+import Module ( Module )
+import RdrName ( nameRdrName )
+import Name ( Name, BuiltInSyntax(..), nameUnique, nameOccName,
+ nameModule, mkWiredInName )
+import OccName ( mkOccNameFS, tcName, dataName, mkTupleOcc,
+ mkDataConWorkerOcc )
+import DataCon ( DataCon, mkDataCon, dataConWorkId, dataConSourceArity )
+import Var ( TyVar, tyVarKind )
+import TyCon ( TyCon, AlgTyConRhs(DataTyCon), tyConDataCons,
+ mkTupleTyCon, mkAlgTyCon, tyConName )
+
+import BasicTypes ( Arity, RecFlag(..), Boxity(..), isBoxed,
+ StrictnessMark(..) )
+
+import Type ( Type, mkTyConTy, mkTyConApp, mkTyVarTy, mkTyVarTys,
+ TyThing(..) )
+import Kind ( mkArrowKinds, liftedTypeKind, ubxTupleKind )
+import Unique ( incrUnique, mkTupleTyConUnique,
+ mkTupleDataConUnique, mkPArrDataConUnique )
+import Array
+import FastString
+import Outputable
+
+alpha_tyvar = [alphaTyVar]
+alpha_ty = [alphaTy]