mkPrimOpId, mkFCallId,
-- And some particular Ids; see below for why they are wired in
- wiredInIds,
+ wiredInIds, ghcPrimIds,
unsafeCoerceId, realWorldPrimId, voidArgId, nullAddrId,
- eRROR_ID, eRROR_CSTRING_ID, rEC_SEL_ERROR_ID, pAT_ERROR_ID, rEC_CON_ERROR_ID,
- rEC_UPD_ERROR_ID, iRREFUT_PAT_ERROR_ID, nON_EXHAUSTIVE_GUARDS_ERROR_ID,
- nO_METHOD_BINDING_ERROR_ID, aBSENT_ERROR_ID, pAR_ERROR_ID
+ eRROR_ID, eRROR_CSTRING_ID, rEC_SEL_ERROR_ID, pAT_ERROR_ID,
+ rEC_CON_ERROR_ID, rEC_UPD_ERROR_ID, iRREFUT_PAT_ERROR_ID,
+ nON_EXHAUSTIVE_GUARDS_ERROR_ID, nO_METHOD_BINDING_ERROR_ID,
+ aBSENT_ERROR_ID, pAR_ERROR_ID
) where
#include "HsVersions.h"
-- error-reporting functions that they have an 'open'
-- result type. -- sof 1/99]
- aBSENT_ERROR_ID
- , eRROR_ID
- , eRROR_CSTRING_ID
- , iRREFUT_PAT_ERROR_ID
- , nON_EXHAUSTIVE_GUARDS_ERROR_ID
- , nO_METHOD_BINDING_ERROR_ID
- , pAR_ERROR_ID
- , pAT_ERROR_ID
- , rEC_CON_ERROR_ID
- , rEC_UPD_ERROR_ID
-
- -- These can't be defined in Haskell, but they have
+ aBSENT_ERROR_ID,
+ eRROR_ID,
+ eRROR_CSTRING_ID,
+ iRREFUT_PAT_ERROR_ID,
+ nON_EXHAUSTIVE_GUARDS_ERROR_ID,
+ nO_METHOD_BINDING_ERROR_ID,
+ pAR_ERROR_ID,
+ pAT_ERROR_ID,
+ rEC_CON_ERROR_ID,
+ rEC_UPD_ERROR_ID
+ ] ++ ghcPrimIds
+
+-- These Ids are exported from GHC.Prim
+ghcPrimIds
+ = [ -- These can't be defined in Haskell, but they have
-- perfectly reasonable unfoldings in Core
- , realWorldPrimId
- , unsafeCoerceId
- , nullAddrId
- , getTagId
- , seqId
+ realWorldPrimId,
+ unsafeCoerceId,
+ nullAddrId,
+ getTagId,
+ seqId
]
\end{code}
\begin{code}
-- unsafeCoerce# :: forall a b. a -> b
unsafeCoerceId
- = pcMiscPrelId unsafeCoerceIdKey pREL_GHC FSLIT("unsafeCoerce#") ty info
+ = pcMiscPrelId unsafeCoerceIdKey gHC_PRIM FSLIT("unsafeCoerce#") ty info
where
info = noCafNoTyGenIdInfo `setUnfoldingInfo` mkCompulsoryUnfolding rhs
-- The reason is is here is because we don't provide
-- a way to write this literal in Haskell.
nullAddrId
- = pcMiscPrelId nullAddrIdKey pREL_GHC FSLIT("nullAddr#") addrPrimTy info
+ = pcMiscPrelId nullAddrIdKey gHC_PRIM FSLIT("nullAddr#") addrPrimTy info
where
info = noCafNoTyGenIdInfo `setUnfoldingInfo`
mkCompulsoryUnfolding (Lit nullAddrLit)
seqId
- = pcMiscPrelId seqIdKey pREL_GHC FSLIT("seq") ty info
+ = pcMiscPrelId seqIdKey gHC_PRIM FSLIT("seq") ty info
where
info = noCafNoTyGenIdInfo `setUnfoldingInfo` mkCompulsoryUnfolding rhs
\begin{code}
getTagId
- = pcMiscPrelId getTagIdKey pREL_GHC FSLIT("getTag#") ty info
+ = pcMiscPrelId getTagIdKey gHC_PRIM FSLIT("getTag#") ty info
where
info = noCafNoTyGenIdInfo `setUnfoldingInfo` mkCompulsoryUnfolding rhs
-- We don't provide a defn for this; you must inline it
\begin{code}
realWorldPrimId -- :: State# RealWorld
- = pcMiscPrelId realWorldPrimIdKey pREL_GHC FSLIT("realWorld#")
+ = pcMiscPrelId realWorldPrimIdKey gHC_PRIM FSLIT("realWorld#")
realWorldStatePrimTy
(noCafNoTyGenIdInfo `setUnfoldingInfo` mkOtherCon [])
-- The mkOtherCon makes it look that realWorld# is evaluated
--
-- Binary interface file support.
-module BinIface ( writeBinIface, compileIface ) where
+module BinIface ( writeBinIface ) where
import HscTypes
import BasicTypes
import Class
import VarEnv
import CostCentre
-import Module ( mkHomeModule )
import Name ( Name, nameOccName )
import NameEnv ( NameEnv, lookupNameEnv, nameEnvElts )
import OccName ( OccName )
import RnMonad ( ParsedIface(..) )
import RnHsSyn
import DriverState ( v_Build_tag )
-import DriverUtil ( newsuf )
-import Lex
import CmdLineOpts ( opt_IgnoreIfacePragmas, opt_HiVersion )
import StringBuffer ( hGetStringBuffer )
-import ParseIface ( parseIface )
-import Outputable
import Panic
import SrcLoc
putBinFileWithDict hi_path (mi_module mod_iface) mod_iface
-- ----------------------------------------------------------------------------
--- Compile an interface from text into binary
-
-compileIface :: FilePath -> IO ()
-compileIface infile = do
- let outfile = newsuf "hi" infile -- make it a .hi file
- buf <- hGetStringBuffer False infile
- case parseIface buf (mkPState loc exts) of
- PFailed err -> throwDyn (ProgramError (showSDoc err))
- POk _ iface ->
- putBinFileWithDict outfile (mkHomeModule (pi_mod iface)) iface
- where
- exts = ExtFlags {glasgowExtsEF = True,
- parrEF = True}
- loc = mkSrcLoc (FastString.mkFastString infile) 1
-
{-* Generated by DrIFT-v1.0 : Look, but Don't Touch. *-}
-- Imported from other files :-
{-# OPTIONS -#include "hschooks.h" #-}
-----------------------------------------------------------------------------
--- $Id: DriverFlags.hs,v 1.87 2002/03/04 17:01:30 simonmar Exp $
+-- $Id: DriverFlags.hs,v 1.88 2002/03/05 14:18:55 simonmar Exp $
--
-- Driver flags
--
#include "HsVersions.h"
#include "../includes/config.h"
-import BinIface ( compileIface )
import MkIface ( showIface )
import DriverState
import DriverPhases
------- interfaces ----------------------------------------------------
, ( "-show-iface" , HasArg (\f -> do showIface f
exitWith ExitSuccess))
- , ( "-compile-iface" , HasArg (\f -> do compileIface f
- exitWith ExitSuccess))
------- verbosity ----------------------------------------------------
, ( "n" , NoArg setDryRun )
wiredInThings, -- Names of wired in things
wiredInThingEnv,
+ ghcPrimExports,
+ cCallableClassDecl, cReturnableClassDecl, assertDecl,
-- Primop RdrNames
eqH_Char_RDR, ltH_Char_RDR, eqH_Word_RDR, ltH_Word_RDR,
#include "HsVersions.h"
--- friends:
import PrelNames -- Prelude module names
-import PrimOp ( PrimOp(..), allThePrimOps, primOpRdrName )
+import PrimOp ( PrimOp(..), allThePrimOps, primOpRdrName, primOpOcc )
import DataCon ( DataCon )
+import Id ( idName )
import MkId ( mkPrimOpId, wiredInIds )
import MkId -- All of it, for re-export
+import Name ( nameOccName, nameRdrName )
+import RdrName ( mkRdrUnqual )
+import HsSyn ( HsTyVarBndr(..), TyClDecl(..), HsType(..) )
+import OccName ( mkVarOcc )
import TysPrim ( primTyCons )
import TysWiredIn ( wiredInTyCons )
-import HscTypes ( TyThing(..), implicitTyThingIds, TypeEnv, mkTypeEnv )
-
--- others:
+import RdrHsSyn ( mkClassDecl )
+import HscTypes ( TyThing(..), implicitTyThingIds, TypeEnv, mkTypeEnv,
+ GenAvailInfo(..), RdrAvailInfo )
import Class ( Class, classKey )
-import Type ( funTyCon )
+import Type ( funTyCon, openTypeKind, liftedTypeKind )
+import TyCon ( tyConName )
+import SrcLoc ( noSrcLoc )
import Util ( isIn )
\end{code}
sense of them in interface pragmas. It's cool, though they all have
"non-standard" names, so they won't get past the parser in user code.
+%************************************************************************
+%* *
+\subsection{Export lists for pseudo-modules (GHC.Prim)}
+%* *
+%************************************************************************
+
+GHC.Prim "exports" all the primops and primitive types, some
+wired-in Ids, and the CCallable & CReturnable classes.
+
+\begin{code}
+ghcPrimExports :: [RdrAvailInfo]
+ = AvailTC cCallableOcc [ cCallableOcc ] :
+ AvailTC cReturnableOcc [ cReturnableOcc ] :
+ Avail (nameOccName assertName) : -- doesn't have an Id
+ map (Avail . nameOccName . idName) ghcPrimIds ++
+ map (Avail . primOpOcc) allThePrimOps ++
+ [ AvailTC occ [occ] |
+ n <- funTyCon : primTyCons, let occ = nameOccName (tyConName n)
+ ]
+ where
+ cCallableOcc = nameOccName cCallableClassName
+ cReturnableOcc = nameOccName cReturnableClassName
+
+assertDecl
+ = IfaceSig {
+ tcdName = nameRdrName assertName,
+ tcdType = HsForAllTy (Just [liftedAlpha]) [] (HsTyVar alpha),
+ tcdIdInfo = [],
+ tcdLoc = noSrcLoc
+ }
+
+cCallableClassDecl
+ = mkClassDecl
+ ([], nameRdrName cCallableClassName, [openAlpha])
+ [] -- no fds
+ [] -- no sigs
+ Nothing -- no mbinds
+ noSrcLoc
+
+cReturnableClassDecl
+ = mkClassDecl
+ ([], nameRdrName cReturnableClassName, [openAlpha])
+ [] -- no fds
+ [] -- no sigs
+ Nothing -- no mbinds
+ noSrcLoc
+
+alpha = mkRdrUnqual (mkVarOcc FSLIT("a"))
+openAlpha = IfaceTyVar alpha openTypeKind
+liftedAlpha = IfaceTyVar alpha liftedTypeKind
+\end{code}
%************************************************************************
%* *
\begin{code}
pRELUDE_Name = mkModuleName "Prelude"
-pREL_GHC_Name = mkModuleName "GHC.Prim" -- Primitive types and values
+gHC_PRIM_Name = mkModuleName "GHC.Prim" -- Primitive types and values
pREL_BASE_Name = mkModuleName "GHC.Base"
pREL_ENUM_Name = mkModuleName "GHC.Enum"
pREL_SHOW_Name = mkModuleName "GHC.Show"
gLA_EXTS_Name = mkModuleName "GlaExts"
-pREL_GHC = mkPrelModule pREL_GHC_Name
+gHC_PRIM = mkPrelModule gHC_PRIM_Name
pREL_BASE = mkPrelModule pREL_BASE_Name
pREL_ADDR = mkPrelModule pREL_ADDR_Name
pREL_PTR = mkPrelModule pREL_PTR_Name
mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
-mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
-mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
-mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
-mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
-mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
+mkTupNameStr Unboxed 1 = (gHC_PRIM_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
+mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, _PK_ "(#,#)")
+mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, _PK_ "(#,,#)")
+mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, _PK_ "(#,,,#)")
+mkTupNameStr Unboxed n = (gHC_PRIM_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName
mkTupConRdrName space boxity arity = case mkTupNameStr boxity arity of
usageKindConName = kindQual FSLIT("$") usageConKey
typeConName = kindQual FSLIT("Type") typeConKey
-funTyConName = tcQual pREL_GHC_Name FSLIT("(->)") funTyConKey
-charPrimTyConName = tcQual pREL_GHC_Name FSLIT("Char#") charPrimTyConKey
-intPrimTyConName = tcQual pREL_GHC_Name FSLIT("Int#") intPrimTyConKey
-int32PrimTyConName = tcQual pREL_GHC_Name FSLIT("Int32#") int32PrimTyConKey
-int64PrimTyConName = tcQual pREL_GHC_Name FSLIT("Int64#") int64PrimTyConKey
-wordPrimTyConName = tcQual pREL_GHC_Name FSLIT("Word#") wordPrimTyConKey
-word32PrimTyConName = tcQual pREL_GHC_Name FSLIT("Word32#") word32PrimTyConKey
-word64PrimTyConName = tcQual pREL_GHC_Name FSLIT("Word64#") word64PrimTyConKey
-addrPrimTyConName = tcQual pREL_GHC_Name FSLIT("Addr#") addrPrimTyConKey
-floatPrimTyConName = tcQual pREL_GHC_Name FSLIT("Float#") floatPrimTyConKey
-doublePrimTyConName = tcQual pREL_GHC_Name FSLIT("Double#") doublePrimTyConKey
-statePrimTyConName = tcQual pREL_GHC_Name FSLIT("State#") statePrimTyConKey
-realWorldTyConName = tcQual pREL_GHC_Name FSLIT("RealWorld") realWorldTyConKey
-arrayPrimTyConName = tcQual pREL_GHC_Name FSLIT("Array#") arrayPrimTyConKey
-byteArrayPrimTyConName = tcQual pREL_GHC_Name FSLIT("ByteArray#") byteArrayPrimTyConKey
-mutableArrayPrimTyConName = tcQual pREL_GHC_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey
-mutableByteArrayPrimTyConName = tcQual pREL_GHC_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey
-mutVarPrimTyConName = tcQual pREL_GHC_Name FSLIT("MutVar#") mutVarPrimTyConKey
-mVarPrimTyConName = tcQual pREL_GHC_Name FSLIT("MVar#") mVarPrimTyConKey
-stablePtrPrimTyConName = tcQual pREL_GHC_Name FSLIT("StablePtr#") stablePtrPrimTyConKey
-stableNamePrimTyConName = tcQual pREL_GHC_Name FSLIT("StableName#") stableNamePrimTyConKey
-foreignObjPrimTyConName = tcQual pREL_GHC_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey
-bcoPrimTyConName = tcQual pREL_GHC_Name FSLIT("BCO#") bcoPrimTyConKey
-weakPrimTyConName = tcQual pREL_GHC_Name FSLIT("Weak#") weakPrimTyConKey
-threadIdPrimTyConName = tcQual pREL_GHC_Name FSLIT("ThreadId#") threadIdPrimTyConKey
-cCallableClassName = clsQual pREL_GHC_Name FSLIT("CCallable") cCallableClassKey
-cReturnableClassName = clsQual pREL_GHC_Name FSLIT("CReturnable") cReturnableClassKey
+funTyConName = tcQual gHC_PRIM_Name FSLIT("(->)") funTyConKey
+charPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Char#") charPrimTyConKey
+intPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int#") intPrimTyConKey
+int32PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int32#") int32PrimTyConKey
+int64PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int64#") int64PrimTyConKey
+wordPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word#") wordPrimTyConKey
+word32PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word32#") word32PrimTyConKey
+word64PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word64#") word64PrimTyConKey
+addrPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Addr#") addrPrimTyConKey
+floatPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Float#") floatPrimTyConKey
+doublePrimTyConName = tcQual gHC_PRIM_Name FSLIT("Double#") doublePrimTyConKey
+statePrimTyConName = tcQual gHC_PRIM_Name FSLIT("State#") statePrimTyConKey
+realWorldTyConName = tcQual gHC_PRIM_Name FSLIT("RealWorld") realWorldTyConKey
+arrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Array#") arrayPrimTyConKey
+byteArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ByteArray#") byteArrayPrimTyConKey
+mutableArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey
+mutableByteArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey
+mutVarPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutVar#") mutVarPrimTyConKey
+mVarPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MVar#") mVarPrimTyConKey
+stablePtrPrimTyConName = tcQual gHC_PRIM_Name FSLIT("StablePtr#") stablePtrPrimTyConKey
+stableNamePrimTyConName = tcQual gHC_PRIM_Name FSLIT("StableName#") stableNamePrimTyConKey
+foreignObjPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey
+bcoPrimTyConName = tcQual gHC_PRIM_Name FSLIT("BCO#") bcoPrimTyConKey
+weakPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Weak#") weakPrimTyConKey
+threadIdPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ThreadId#") threadIdPrimTyConKey
+cCallableClassName = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
+cReturnableClassName = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
-- PrelBase data types and constructors
charTyConName = tcQual pREL_BASE_Name FSLIT("Char") charTyConKey
deRefStablePtrName = varQual pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey
newStablePtrName = varQual pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
+assertName = varQual gHC_PRIM_Name FSLIT("assert") assertIdKey
+getTagName = varQual gHC_PRIM_Name FSLIT("getTag#") getTagIdKey
+
errorName = varQual pREL_ERR_Name FSLIT("error") errorIdKey
-assertName = varQual pREL_GHC_Name FSLIT("assert") assertIdKey
-getTagName = varQual pREL_GHC_Name FSLIT("getTag#") getTagIdKey
runSTRepName = varQual pREL_ST_Name FSLIT("runSTRep") runSTRepIdKey
-- The "split" Id for splittable implicit parameters
import PprType () -- get at Outputable Type instance.
import Unique ( mkPrimOpIdUnique )
import BasicTypes ( Arity, Boxity(..) )
-import PrelNames ( pREL_GHC, pREL_GHC_Name )
+import PrelNames ( gHC_PRIM, gHC_PRIM_Name )
import Outputable
import FastTypes
\end{code}
-- We have to pass in the Id itself because it's a WiredInId
-- and hence recursive
mkPrimOpIdName op
- = mkWiredInName pREL_GHC (primOpOcc op) (mkPrimOpIdUnique (primOpTag op))
+ = mkWiredInName gHC_PRIM (primOpOcc op) (mkPrimOpIdUnique (primOpTag op))
primOpRdrName :: PrimOp -> RdrName
-primOpRdrName op = mkRdrOrig pREL_GHC_Name (primOpOcc op)
+primOpRdrName op = mkRdrOrig gHC_PRIM_Name (primOpOcc op)
primOpOcc :: PrimOp -> OccName
primOpOcc op = case (primOpInfo op) of
Output stuff:
\begin{code}
pprPrimOp :: PrimOp -> SDoc
-pprPrimOp other_op
- = getPprStyle $ \ sty ->
- if ifaceStyle sty then -- For interfaces Print it qualified with PrelGHC.
- ptext SLIT("PrelGHC.") <> pprOccName occ
- else
- pprOccName occ
- where
- occ = primOpOcc other_op
+pprPrimOp other_op = pprOccName (primOpOcc other_op)
\end{code}
Names for some primops (for ndpFlatten/FlattenMonad.lhs)
import RnMonad
import ParseIface ( parseIface )
+import PrelNames ( gHC_PRIM_Name, gHC_PRIM )
import Name ( Name {-instance NamedThing-},
nameModule, isLocalName, nameIsLocalOrFrom
)
findAndReadIface doc_str mod_name hi_boot_file
= traceRn trace_msg `thenRn_`
+ -- Check for GHC.Prim, and return its static interface
+ if mod_name == gHC_PRIM_Name
+ then returnRn (Right (gHC_PRIM, ghcPrimIface))
+ else
+
-- In interactive or --make mode, we are *not allowed* to demand-load
-- a home package .hi file. So don't even look for them.
-- This helps in the case where you are sitting in eg. ghc/lib/std
#include "HsVersions.h"
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 405
-import IOExts ( fixIO )
-#elif defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 302
-import PrelIOBase ( fixIO ) -- Should be in GlaExts
-#else
-import IOBase ( fixIO )
-#endif
-import IOExts ( IORef, newIORef, readIORef, writeIORef, unsafePerformIO )
-import IO ( hPutStr, stderr )
-
import HsSyn
import RdrHsSyn
import RnHsSyn ( RenamedFixitySig )
nameOccName,
decode, mkLocalName, mkKnownKeyGlobal
)
-import NameEnv ( NameEnv, lookupNameEnv, emptyNameEnv, extendNameEnvList )
-import Module ( Module, ModuleName, ModuleSet, emptyModuleSet, PackageName )
+import NameEnv ( NameEnv, lookupNameEnv, emptyNameEnv,
+ extendNameEnvList )
+import Module ( Module, ModuleName, ModuleSet, emptyModuleSet,
+ PackageName )
+import PrelInfo ( ghcPrimExports,
+ cCallableClassDecl, cReturnableClassDecl, assertDecl )
+import PrelNames ( mkUnboundName, gHC_PRIM_Name )
import NameSet
import CmdLineOpts ( DynFlags, DynFlag(..), dopt )
import SrcLoc ( SrcLoc, generatedSrcLoc, noSrcLoc )
import Bag ( Bag, emptyBag, isEmptyBag, snocBag )
import UniqSupply
import Outputable
-import PrelNames ( mkUnboundName )
+import IOExts ( IORef, newIORef, readIORef, writeIORef,
+ fixIO, unsafePerformIO )
+import IO ( hPutStr, stderr )
+
infixr 9 `thenRn`, `thenRn_`
\end{code}
%************************************************************************
%* *
+\subsection{Wired-in interfaces}
+%* *
+%************************************************************************
+
+\begin{code}
+ghcPrimIface :: ParsedIface
+ghcPrimIface = ParsedIface {
+ pi_mod = gHC_PRIM_Name,
+ pi_pkg = FSLIT("base"),
+ pi_vers = 1,
+ pi_orphan = False,
+ pi_usages = [],
+ pi_exports = (1, [(gHC_PRIM_Name, ghcPrimExports)]),
+ pi_decls = [(1,cCallableClassDecl),
+ (1,cReturnableClassDecl),
+ (1,assertDecl)],
+ pi_fixity = [],
+ pi_insts = [],
+ pi_rules = (1,[]),
+ pi_deprecs = Nothing
+ }
+\end{code}
+
+%************************************************************************
+%* *
\subsection{The renamer state}
%* *
%************************************************************************