-import Kind ( mkBoxedTypeKind, mkArrowKind )
-import Name ( mkWiredInTyConName, mkWiredInIdName, mkTupNameStr )
-import TyCon ( mkDataTyCon, mkTupleTyCon, mkSynTyCon,
- NewOrData(..), TyCon
- )
-import Type ( mkTyConTy, applyTyCon, mkSigmaTy, mkTyVarTys,
- mkFunTy, mkFunTys, maybeAppTyCon,
- GenType(..), SYN_IE(ThetaType), SYN_IE(TauType) )
-import TyVar ( tyVarKind, alphaTyVars, alphaTyVar, betaTyVar )
-import Lex ( mkTupNameStr )
-import Unique
-import Util ( assoc, panic )
-
-nullSpecEnv = error "TysWiredIn:nullSpecEnv = "
-addOneToSpecEnv = error "TysWiredIn:addOneToSpecEnv = "
-pc_gen_specs = error "TysWiredIn:pc_gen_specs "
-mkSpecInfo = error "TysWiredIn:SpecInfo"
-
-alpha_tyvar = [alphaTyVar]
-alpha_ty = [alphaTy]
-alpha_beta_tyvars = [alphaTyVar, betaTyVar]
-
-pcDataTyCon, pcNewTyCon
- :: Unique{-TyConKey-} -> Module -> FAST_STRING
- -> [TyVar] -> [Id] -> TyCon
-
-pcDataTyCon = pc_tycon DataType
-pcNewTyCon = pc_tycon NewType
-
-pc_tycon new_or_data key mod str tyvars cons
- = tycon
- where
- tycon = mkDataTyCon name tycon_kind
- tyvars [{-no context-}] cons [{-no derivings-}]
- new_or_data
- 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 -> SpecEnv -> Id
-pcDataCon key mod str tyvars context arg_tys tycon specenv
- = 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
-
-pcGenerateDataSpecs :: Type -> SpecEnv
-pcGenerateDataSpecs ty
- = pc_gen_specs False err err err ty
- where
- err = panic "PrelUtils:GenerateDataSpecs"
-\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 (applyTyCon 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]