[project @ 1996-03-19 08:58:34 by partain]
[ghc-hetmet.git] / ghc / compiler / rename / Rename1.lhs
diff --git a/ghc/compiler/rename/Rename1.lhs b/ghc/compiler/rename/Rename1.lhs
deleted file mode 100644 (file)
index 80f56d7..0000000
+++ /dev/null
@@ -1,901 +0,0 @@
-%
-% (c) The GRASP/AQUA Project, Glasgow University, 1992-1995
-%
-\section[Rename1]{@Rename1@: gather up imported information}
-
-See the @Rename@ module for a basic description of the renamer.
-
-\begin{code}
-#include "HsVersions.h"
-
-module Rename1 (
-       rnModule1,
-
-       -- for completeness
-       Module, Bag, ProtoNamePat(..), InPat, Maybe,
-       PprStyle, Pretty(..), PrettyRep, ProtoName, Name,
-       PreludeNameFun(..), PreludeNameFuns(..)
-    ) where
-
-IMPORT_Trace           -- ToDo: rm
-import Pretty          -- these two too
-import Outputable
-
-import AbsSyn
-import AbsSynFuns      ( getMentionedVars ) -- *** not via AbsSyn ***
-import Bag             ( Bag, emptyBag, unitBag, snocBag, unionBags, bagToList )
-import Errors
-import HsPragmas
-import FiniteMap
-import Maybes          ( maybeToBool, catMaybes, Maybe(..) )
---OLD: import NameEnv  ( mkStringLookupFn )
-import ProtoName       ( ProtoName(..), mkPreludeProtoName )
-import RenameAuxFuns
-import RenameMonad12
-import Util
-\end{code}
-
-
-%************************************************************************
-%*                                                                     *
-\subsection{Types and things used herein}
-%*                                                                     *
-%************************************************************************
-
-@AllIntDecls@ is the type returned from processing import statement(s)
-in the main module.
-
-\begin{code}
-type AllIntDecls = ([ProtoNameFixityDecl], [ProtoNameTyDecl],
-                   [ProtoNameClassDecl],  [ProtoNameInstDecl],
-                   [ProtoNameSig], Bag FAST_STRING)
-\end{code}
-
-The selective-import function @SelectiveImporter@ maps a @ProtoName@
-to something which indicates how much of the thing, if anything, is
-wanted by the importing module.
-\begin{code}
-type SelectiveImporter = ProtoName -> Wantedness
-
-data Wantedness
-  = Wanted
-  | NotWanted
-  | WantedWith IE
-\end{code}
-
-The @ProtoNames@ supplied to these ``name functions'' are always
-@Unks@, unless they are fully-qualified names, which occur only in
-interface pragmas (and, therefore, never on the {\em definitions} of
-things).  That doesn't happen in @Rename1@!
-\begin{code}
-type IntNameFun          = ProtoName -> ProtoName
-type IntTCNameFun = ProtoName -> (ProtoName, IntNameFun)
-\end{code}
-
-%************************************************************************
-%*                                                                     *
-\subsection{First pass over the entire module}
-%*                                                                     *
-%************************************************************************
-
-This pass flattens out the declarations embedded within the interfaces
-which this module imports.  The result is a new module with no
-imports, but with more declarations.  The declarations which arose
-from the imported interfaces will have @ProtoNames@ with @Imp@
-constructors; the declarations in the body of this module are
-unaffected, so they will still be @Unk@'s.
-
-We import only the declarations from interfaces which are actually {\em
-used}.  This saves time later, because we don't need process the
-unused ones.
-
-\begin{code}
-rnModule1 :: PreludeNameFuns
-         -> Bool               -- see use below
-         -> ProtoNameModule
-         -> Rn12M (ProtoNameModule, [FAST_STRING])
-
-rnModule1 pnf@(v_pnf, tc_pnf)
-       use_mentioned_vars_heuristic
-       (Module mod_name exports imports fixes
-               ty_decls absty_sigs class_decls inst_decls specinst_sigs
-               defaults binds _ src_loc)
-
-  =    -- slurp through the *body* of the module, collecting names of
-       -- mentioned *variables*, 3+ letters long & not prelude names.
-       -- Note: we *do* have to pick up top-level binders,
-       -- so we can check for conflicts with imported guys!
-    let
-{- OLD:MENTIONED-}
-       (uses_Mdotdot_in_exports, mentioned_vars)
-         = getMentionedVars v_pnf exports fixes class_decls inst_decls binds
-
-       -- Using the collected "mentioned" variables, create an
-       -- "is-mentioned" function (:: FAST_STRING -> Bool), which gives
-       -- True if something is mentioned is in the list collected.
-       -- For more details, see under @selectAll@, notably the
-       -- handling of short (< 3 chars) names.
-
-       -- Note: this "is_mentioned" game doesn't work if the export
-       -- list includes any M.. constructs (because that mentions
-       -- variables *implicitly*, basically).  getMentionedVars tells
-       -- us this, and we act accordingly.
-
-       is_mentioned_maybe
-         = lookupFM {-OLD: mkStringLookupFn-} (listToFM
-               [ (x, panic "is_mentioned_fn")
-               | x <- mentioned_vars ++ needed_for_deriving ]
-               )
-               -- OLD: False{-not-sorted-}
-         where
-           needed_for_deriving -- is this a HACK or what?
-             = [ SLIT("&&"),
-                 SLIT("."),
-                 SLIT("lex"),
-                 SLIT("map"),
-                 SLIT("not"),
-                 SLIT("readParen"),
-                 SLIT("showParen"),
-                 SLIT("showSpace__"),
-                 SLIT("showString")
-               ]
-
-       is_mentioned_fn
-         = if use_mentioned_vars_heuristic
-           && not (uses_Mdotdot_in_exports)
-           then \ x -> maybeToBool (is_mentioned_maybe x)
-           else \ x -> True
-{- OLD:MENTIONED-}
---O:M  is_mentioned_fn = \ x -> True -- ToDo: delete altogether
-    in
-       -- OK, now do the business:
-    doImportedIfaces pnf is_mentioned_fn imports
-                `thenRn12`  \ (int_fixes, int_ty_decls,
-                               int_class_decls, int_inst_decls,
-                               int_sigs, import_names) ->
-    let
-       inst_decls' = doRevoltingInstDecls tc_nf inst_decls
-    in
-    returnRn12
-        ((Module mod_name
-               exports imports -- passed along mostly for later checking
-               (int_fixes        ++ fixes)
-               (int_ty_decls     ++ ty_decls)
-               absty_sigs
-               (int_class_decls ++ class_decls)
-               (int_inst_decls  ++ inst_decls')
-               specinst_sigs
-               defaults
-               binds
-               int_sigs
-               src_loc),
-         bagToList import_names)
-  where
-    -- This function just spots prelude names
-    tc_nf pname@(Unk s) = case (tc_pnf s) of
-                          Nothing   -> pname
-                          Just name -> Prel name
-
-    tc_nf other_pname  = panic "In tc_nf passed to doRevoltingInstDecls"
-       -- The only place where Imps occur is on Ids in unfoldings;
-       -- this function is only used on type-things.
-\end{code}
-
-Instance declarations in the module itself are treated in a horribly
-special way.  Because their class name and type constructor will be
-compared against imported ones in the second pass (to eliminate
-duplicate instance decls) we need to make Prelude classes and tycons
-appear as such.  (For class and type decls, the module can't be
-declaring a prelude class or tycon, so Prel and Unk things can just
-compare non-equal.)  This is a HACK.
-
-\begin{code}
-doRevoltingInstDecls :: IntNameFun -> [ProtoNameInstDecl] -> [ProtoNameInstDecl]
-
-doRevoltingInstDecls tc_nf decls
-  = map revolt_me decls
-  where
-    revolt_me (InstDecl context cname ty binds True modname imod uprags pragma src_loc)
-      = InstDecl
-           context                     -- Context unchanged
-           (tc_nf cname)               -- Look up the class
-           (doIfaceMonoType1 tc_nf ty) -- Ditto the type
-           binds                       -- Binds unchanged
-           True
-           modname
-           imod
-           uprags
-           pragma
-           src_loc
-\end{code}
-
-%************************************************************************
-%*                                                                     *
-\subsection{Process a module's imported interfaces}
-%*                                                                     *
-%************************************************************************
-
-@doImportedIfaces@ processes the entire set of interfaces imported by the
-module being renamed.
-
-\begin{code}
-doImportedIfaces :: PreludeNameFuns
-             -> (FAST_STRING -> Bool)
-             -> [ProtoNameImportedInterface]
-             -> Rn12M AllIntDecls
-
-doImportedIfaces pnfs is_mentioned_fn []
-  = returnRn12 ( [{-fixities-}],  [{-tydecls-}], [{-clasdecls-}],
-                [{-instdecls-}], [{-sigs-}], emptyBag )
-
-doImportedIfaces pnfs is_mentioned_fn (iface:ifaces)
-  = doOneIface  pnfs is_mentioned_fn iface
-                        `thenRn12` \ (ifixes1, itd1, icd1, iid1, isd1, names1) ->
-
-    doImportedIfaces pnfs is_mentioned_fn ifaces
-                        `thenRn12` \ (ifixes2, itd2, icd2, iid2, isd2, names2) ->
-
-    returnRn12 (ifixes1 ++ ifixes2,
-               itd1 ++ itd2,
-               icd1 ++ icd2,
-               iid1 ++ iid2,
-               isd1 ++ isd2,
-               names1 `unionBags` names2)
-\end{code}
-
-\begin{code}
-doOneIface pnfs is_mentioned_fn (ImportAll int renamings)
-  = let
-       renaming_fn = mkRenamingFun renamings
-       -- if there are any renamings, then we don't use
-       -- the "is_mentioned_fn" hack; possibly dangerous (paranoia reigns)
-       revised_is_mentioned_fn
-         = if null renamings
-           then is_mentioned_fn
-           else (\ x -> True) -- pretend everything is mentioned
-    in
---  pprTrace "ImportAll:mod_rns:" (ppr PprDebug renamings) (
-    doIface1 renaming_fn pnfs (selectAll renaming_fn revised_is_mentioned_fn) int
---  )
-
-doOneIface pnfs unused_is_mentioned_fn (ImportSome int ie_list renamings)
-  = --pprTrace "ImportSome:mod_rns:" (ppr PprDebug renamings) (
-    doIface1 (mkRenamingFun renamings) pnfs si_fun int
-    --)
-  where
-    -- the `selective import' function should not be applied
-    -- to the Imps that occur on Ids in unfoldings.
-
-    si_fun (Unk str) = check_ie str ie_list
-    si_fun other     = panic "si_fun in doOneIface"
-
-    check_ie name [] = NotWanted
-    check_ie name (ie:ies)
-      = case ie of
-             IEVar n             | name == n -> Wanted
-             IEThingAbs n        | name == n -> WantedWith ie
-             IEThingAll n        | name == n -> WantedWith ie
-             IEConWithCons n ns  | name == n -> WantedWith ie
-             IEClsWithOps n ns   | name == n -> WantedWith ie
-             IEModuleContents _              -> panic "Module.. in import list?"
-             other                           -> check_ie name ies
-
-doOneIface pnfs unused_is_mentioned_fn (ImportButHide int ie_list renamings)
-  = --pprTrace "ImportButHide:mod_rns:" (ppr PprDebug renamings) (
-    doIface1 (mkRenamingFun renamings) pnfs si_fun int
-    --)
-  where
-    -- see comment above:
-
-    si_fun (Unk str) | str `elemFM` entity_info = NotWanted
-                    | otherwise                = Wanted
-
-    entity_info = fst (getIEStrings ie_list)
-\end{code}
-
-@selectAll@ ``normally'' creates an @SelectiveImporter@ that declares
-everything from an interface to be @Wanted@.  We may, however, pass
-in a more discriminating @is_mentioned_fn@ (returns @True@ if the
-named entity is mentioned in the body of the module in question), which
-can be used to trim off junk from an interface.
-
-For @selectAll@ to say something is @NotWanted@, it must be a
-variable, it must not be in the collected-up list of mentioned
-variables (checked with @is_mentioned_fn@), and it must be three chars
-or longer.
-
-And, of course, we mustn't forget to take account of renaming!
-
-ADR Question: What's so magical about names longer than 3 characters?
-Why would we want to keep long names which aren't mentioned when we're
-quite happy to throw away short names that aren't mentioned?
-
-\begin{code}
-selectAll :: (FAST_STRING -> FAST_STRING) -> (FAST_STRING -> Bool) -> SelectiveImporter
-
-selectAll renaming_fn is_mentioned_fn (Unk str) -- gotta be an Unk
-  = let
-       rn_str = renaming_fn str
-    in
-    if (isAvarid rn_str)
-    && (not (is_mentioned_fn rn_str))
-    && (_UNPK_ rn_str `lengthExceeds` 2)
-    then NotWanted
-    else Wanted
-\end{code}
-
-
-%************************************************************************
-%*                                                                     *
-\subsection{First pass over a particular interface}
-%*                                                                     *
-%************************************************************************
-
-
-@doIface1@ handles a specific interface. First it looks at the
-interface imports, creating a bag that maps local names back to their
-original names, from which it makes a function that does the same. It
-then uses this function to create a triple of bags for the interface
-type, class and value declarations, in which local names have been
-mapped back into original names.
-
-Notice that @mkLocalNameFun@ makes two different functions. The first
-is the name function for the interface. This takes a local name and
-provides an original name for any name in the interface by using
-either of:
-\begin{itemize}
-\item
-the original name produced by the renaming function;
-\item
-the local name in the interface and the interface name.
-\end{itemize}
-
-The function @doIfaceImports1@ receives two association lists which will
-be described at its definition.
-
-\begin{code}
-doIface1 :: (FAST_STRING -> FAST_STRING)    -- Renamings in import stmt of module
-       -> PreludeNameFuns
-       -> SelectiveImporter
-       -> ProtoNameInterface
-       -> Rn12M AllIntDecls
-
-doIface1 mod_rn_fn (v_pnf, tc_pnf) sifun
-       (MkInterface i_name import_decls fix_decls ty_decls class_decls
-                   inst_decls sig_decls anns)
-
-  = doIfaceImports1 mod_rn_fn i_name import_decls      `thenRn12` \ (v_bag, tc_bag) ->
-    do_body (v_bag, tc_bag)
-  where
-    do_body (v_bag, tc_bag)
-      = report_all_errors                      `thenRn12` \ _ ->
-
-       doIfaceTyDecls1 sifun full_tc_nf ty_decls       `thenRn12` \ ty_decls' ->
-
-       doIfaceClassDecls1 sifun full_tc_nf class_decls  `thenRn12` \ class_decls' ->
-
-       let sig_decls'  = doIfaceSigs1 sifun v_nf tc_nf sig_decls
-           fix_decls'  = doIfaceFixes1 sifun v_nf fix_decls
-           inst_decls' = doIfaceInstDecls1 sifun tc_nf inst_decls
-       in
-       returnRn12 (fix_decls', ty_decls', class_decls', inst_decls', sig_decls', unitBag i_name)
-      where
-       v_dups  :: [[(FAST_STRING, ProtoName)]]
-       tc_dups :: [[(FAST_STRING, (ProtoName, IntNameFun))]]
-
-       (imp_v_nf, v_dups)   = mkNameFun {-OLD:v_pnf-}  v_bag
-       (imp_tc_nf, tc_dups) = mkNameFun {-OLD:tc_pnf-} tc_bag
-
-       v_nf :: IntNameFun
-       v_nf (Unk s) = case v_pnf s of
-                        Just n  -> mkPreludeProtoName n
-                        Nothing -> case imp_v_nf s of
-                                     Just n  -> n
-                                     Nothing -> Imp i_name s [i_name] (mod_rn_fn s)
-
-       prel_con_or_op_nf  :: FAST_STRING{-module name-}-> IntNameFun
-                -- Used for (..)'d parts of prelude datatype/class decls;
-                -- OLD:? For `data' types, we happen to know everything;
-                -- OLD:? For class decls, we *don't* know what the class-ops are.
-       prel_con_or_op_nf m (Unk s)
-         = case v_pnf s of
-             Just n  -> mkPreludeProtoName n
-             Nothing -> Imp m s [m] (mod_rn_fn s)
-                        -- Strictly speaking, should be *no renaming* here, folks
-
-       local_con_or_op_nf :: IntNameFun        
-               -- used for non-prelude constructors/ops
-       local_con_or_op_nf (Unk s) = Imp i_name s [i_name] (mod_rn_fn s)
-
-       full_tc_nf :: IntTCNameFun
-       full_tc_nf (Unk s)
-         = case tc_pnf s of
-             Just n  -> (mkPreludeProtoName n,
-                         let
-                             mod = fst (getOrigName n)
-                         in
-                         prel_con_or_op_nf mod)
-
-             Nothing -> case imp_tc_nf s of
-                         Just pair -> pair
-                         Nothing   -> (Imp i_name s [i_name] (mod_rn_fn s),
-                                       local_con_or_op_nf)
-
-       tc_nf = fst . full_tc_nf
-
-        -- ADR: commented out next new lines because I don't believe
-        -- ADR: the check is useful or required by the Standard. (It
-        -- ADR: also messes up the interpreter.)
-
-       tc_errs = [] -- map (map (fst . snd)) tc_dups
-                 -- Ugh! Just keep the dup'd protonames
-       v_errs  = [] -- map (map snd) v_dups
-                 -- Ditto
-
-       report_all_errors
-         = mapRn12 (addErrRn12 . duplicateImportsInInterfaceErr (_UNPK_ i_name))
-                   (tc_errs ++ v_errs)
-\end{code}
-
-
-%************************************************************************
-%*                                                                     *
-\subsection{doIfaceImports1}
-%*                                                                     *
-%************************************************************************
-
-@ImportNameBags@ is a pair of bags (one for values, one for types and
-classes) which specify the new names brought into scope by some
-import declarations in an interface.
-
-\begin{code}
-type ImportNameBags = (Bag (FAST_STRING, ProtoName),
-                      Bag (FAST_STRING, (ProtoName, IntNameFun))
-                     )
-\end{code}
-
-\begin{code}
-doIfaceImports1
-       :: (FAST_STRING -> FAST_STRING) -- Renamings in import stmt of module
-       -> FAST_STRING                  -- name of module whose interface we're doing
-       -> [IfaceImportDecl]
-       -> Rn12M ImportNameBags
-
-doIfaceImports1 _ _  [] = returnRn12 (emptyBag, emptyBag)
-
-doIfaceImports1 mod_rn_fn int_mod_name (imp_decl1 : rest)
-  = do_decl                             imp_decl1  `thenRn12` \ (vb1, tcb1) ->
-    doIfaceImports1 mod_rn_fn int_mod_name rest            `thenRn12` \ (vb2, tcb2) ->
---  pprTrace "vbags/tcbags:" (ppr PprDebug (vb1 `unionBags` vb2, [(s,p) | (s,(p,_)) <- bagToList (tcb1 `unionBags` tcb2)])) (
-    returnRn12 (vb1 `unionBags` vb2, tcb1 `unionBags` tcb2)
---  )
-  where
-    do_decl (IfaceImportDecl orig_mod_name imports renamings src_loc)
-      =                -- Look at the renamings to get a suitable renaming function
-       doRenamings mod_rn_fn int_mod_name orig_mod_name renamings      
-                                   `thenRn12` \ (orig_to_pn, local_to_pn) ->
-
-           -- Now deal with one import at a time, combining results.
-       returnRn12 (
-         foldl (doIfaceImport1 orig_to_pn local_to_pn)
-               (emptyBag, emptyBag)
-               imports
-       )
-\end{code}
-
-@doIfaceImport1@ takes a list of imports and the pair of renaming functions,
-returning a bag which maps local names to original names.
-
-\begin{code}
-doIfaceImport1 :: ( FAST_STRING            -- Original local name
-                -> (FAST_STRING,   -- Local name in this interface
-                    ProtoName)     -- Its full protoname
-               )                   
-                                   
-            -> IntNameFun          -- Local name to ProtoName; use for
-                                   --   constructors and class ops
-                                   
-            -> ImportNameBags      -- Accumulator
-            -> IE                  -- An item in the import list
-            -> ImportNameBags
-
-doIfaceImport1 orig_to_pn local_to_pn (v_bag, tc_bag) (IEVar orig_name)
-  = (v_bag `snocBag` (orig_to_pn orig_name), tc_bag)
-
-doIfaceImport1 orig_to_pn local_to_pn acc (IEThingAbs orig_name)
-  = int_import1_help orig_to_pn local_to_pn acc orig_name
-
-doIfaceImport1 orig_to_pn local_to_pn acc (IEThingAll orig_name)
-  = int_import1_help orig_to_pn local_to_pn acc orig_name
-
--- the next ones will go away with 1.3:
-doIfaceImport1 orig_to_pn local_to_pn acc (IEConWithCons orig_name _)
-  = int_import1_help orig_to_pn local_to_pn acc orig_name
-
-doIfaceImport1 orig_to_pn local_to_pn acc (IEClsWithOps orig_name _)
-  = int_import1_help orig_to_pn local_to_pn acc orig_name
-
-doIfaceImport1 orig_to_pn local_to_pn (v_bag, tc_bag) other
-  = panic "Rename1: strange import decl"
-
--- Little help guy...
-
-int_import1_help orig_to_pn local_to_pn (v_bag, tc_bag) orig_name
-  = case (orig_to_pn orig_name) of { (str, o_name) ->
-    (v_bag, tc_bag `snocBag` (str, (o_name, local_to_pn)))
-    }
-\end{code}
-
-
-The renaming-processing code.  It returns two name-functions. The
-first maps the {\em original} name for an entity onto a @ProtoName@
---- it is used when running over the list of things to be imported.
-The second maps the {\em local} name for a constructor or class op
-back to its original name --- it is used when scanning the RHS of
-a @data@ or @class@ decl.
-
-It can produce errors, if there is a domain clash on the renamings.
-
-\begin{code}
---pprTrace
---instance Outputable _PackedString where
---    ppr sty s = ppStr (_UNPK_ s)
-
-doRenamings :: (FAST_STRING -> FAST_STRING) -- Renamings in import stmt of module
-           -> FAST_STRING      -- Name of the module whose interface we're working on
-           -> FAST_STRING      -- Original-name module for these renamings
-           -> [Renaming]       -- Renamings
-           -> Rn12M
-               ((FAST_STRING        -- Original local name to...
-                   -> (FAST_STRING, -- ... Local name in this interface
-                       ProtoName)   -- ... Its full protoname
-                ),     
-                IntNameFun)         -- Use for constructors, class ops
-
-doRenamings mod_rn_fn int_mod orig_mod []
-  = returnRn12 (
-      \ s ->
-       let
-           result = (s, Imp orig_mod s [int_mod] (mod_rn_fn s))
-       in
---     pprTrace "name1a:" (ppCat [ppr PprDebug s, ppr PprDebug result]) (
-       result
---     )
-       ,
-
-      \ (Unk s) ->
-       let
-           result = Imp orig_mod s [int_mod] (mod_rn_fn s)
-       in
---     pprTrace "name2a:" (ppCat [ppr PprDebug s, ppr PprDebug result]) (
-       result
---     )
-    )
-
-doRenamings mod_rn_fn int_mod orig_mod renamings
-  = let
-       local_rn_fn = mkRenamingFun renamings
-    in
-    --pprTrace "local_rns:" (ppr PprDebug renamings) (
-    returnRn12 (
-      \ s ->
-       let
-           local_name = local_rn_fn s
-           result
-             = (local_name, Imp orig_mod s [int_mod] (mod_rn_fn local_name))
-       in
---     pprTrace "name1:" (ppCat [ppr PprDebug s, ppr PprDebug result]) (
-       result
---     )
-       ,
-
-      \ (Unk s) ->
-       let
-           result
-             = Imp orig_mod s [int_mod] (mod_rn_fn (local_rn_fn s))
-       in
---     pprTrace "name2:" (ppCat [ppr PprDebug s, ppr PprDebug result]) (
-       result
---     )
-    )
-    --)
-\end{code}
-
-\begin{code}
-mkRenamingFun :: [Renaming] -> FAST_STRING -> FAST_STRING
-
-mkRenamingFun []       = \ s -> s
-mkRenamingFun renamings 
-  = let
-       rn_fn = lookupFM (listToFM -- OLD: mkStringLookupFn
-                 [ (old, new) | MkRenaming old new <- renamings ]
-                 ) -- OLD: False {-not-sorted-}
-    in
-    \s -> case rn_fn s of
-           Nothing -> s
-           Just s' -> s'
-\end{code}
-
-
-%************************************************************************
-%*                                                                     *
-\subsection{Type declarations}
-%*                                                                     *
-%************************************************************************
-
-@doIfaceTyDecls1@ uses the `name function' to map local tycon names into
-original names, calling @doConDecls1@ to do the same for the
-constructors. @doTyDecls1@ is used to do both module and interface
-type declarations.
-
-\begin{code}
-doIfaceTyDecls1 :: SelectiveImporter
-             -> IntTCNameFun
-             -> [ProtoNameTyDecl]
-             -> Rn12M [ProtoNameTyDecl]
-
-doIfaceTyDecls1 sifun full_tc_nf ty_decls
-  = mapRn12 do_decl ty_decls `thenRn12` \ decls_maybe ->
-    returnRn12 (catMaybes decls_maybe)
-  where
-    do_decl (TyData context tycon tyvars condecls derivs (DataPragmas hidden_cons specs) src_loc)
-      = let
-           full_thing = returnRn12 (Just ty_decl')
-       in
-               -- GHC doesn't allow derivings in interfaces
-       (if null derivs
-        then returnRn12 ()
-        else addErrRn12 (derivingInIfaceErr tycon derivs src_loc)
-       ) `thenRn12` \ _ ->
-
-       case (sifun tycon) of
-         NotWanted                     -> returnRn12 Nothing
-         Wanted                        -> full_thing
-         WantedWith (IEThingAll _)     -> full_thing
-         WantedWith (IEThingAbs _)     -> returnRn12 (Just abs_ty_decl')
-         WantedWith ie@(IEConWithCons _ _) -> full_thing
-
-         WantedWith really_weird_ie -> -- probably a typo in the pgm
-           addErrRn12 (weirdImportExportConstraintErr
-                       tycon really_weird_ie src_loc) `thenRn12` \ _ ->
-           full_thing
-      where
-       (tycon_name, constr_nf) = full_tc_nf tycon
-       tc_nf                   = fst . full_tc_nf
-
-       condecls'   = map (do_condecl constr_nf tc_nf) condecls
-       hidden_cons' = map (do_condecl constr_nf tc_nf) hidden_cons
-
-       pragmas' invent_hidden
-         = DataPragmas (if null hidden_cons && invent_hidden
-                        then condecls' -- if importing abstractly but condecls were
-                                       -- exported we add them to the data pragma
-                        else hidden_cons')
-                       specs {- ToDo: do_specs -}
-
-       context'    = doIfaceContext1 tc_nf context
-       deriv'      = map tc_nf derivs -- rename derived classes
-
-       ty_decl'    = TyData context' tycon_name tyvars condecls' deriv' (pragmas' False) src_loc
-       abs_ty_decl'= TyData context' tycon_name tyvars []        deriv' (pragmas' True) src_loc
-
-    do_decl (TySynonym tycon tyvars monoty pragmas src_loc)
-      = let
-           full_thing = returnRn12 (Just ty_decl')
-       in
-       case (sifun tycon) of
-         NotWanted                 -> returnRn12 Nothing
-         Wanted                    -> full_thing
-         WantedWith (IEThingAll _) -> full_thing
-
-         WantedWith weird_ie       -> full_thing
-      where
-       (tycon_name,_) = full_tc_nf tycon
-       tc_nf   = fst . full_tc_nf
-       monoty' = doIfaceMonoType1 tc_nf monoty
-       ty_decl' = TySynonym tycon_name tyvars monoty' pragmas src_loc
-
-    -- one name fun for the data constructor, another for the type:
-
-    do_condecl c_nf tc_nf (ConDecl name tys src_loc)
-      = ConDecl (c_nf name) (doIfaceMonoTypes1 tc_nf tys) src_loc
-\end{code}
-
-%************************************************************************
-%*                                                                     *
-\subsection{Class declarations}
-%*                                                                     *
-%************************************************************************
-
-@doIfaceClassDecls1@ uses the `name function' to map local class names into
-original names, calling @doIfaceClassOp1@ to do the same for the
-class operations. @doClassDecls1@ is used to process both module and
-interface class declarations.
-
-\begin{code}
-doIfaceClassDecls1 ::  SelectiveImporter
-                -> IntTCNameFun
-                -> [ProtoNameClassDecl]
-                -> Rn12M [ProtoNameClassDecl]
-
-doIfaceClassDecls1 sifun full_tc_nf clas_decls
-  = mapRn12 do_decl clas_decls `thenRn12` \ decls_maybe ->
-    returnRn12 (catMaybes decls_maybe)
-  where
-    do_decl (ClassDecl ctxt cname tyvar sigs bs@EmptyMonoBinds prags locn)
-                                    -- No defaults in interface
-      = let
-           full_thing = returnRn12 (Just class_decl')
-       in
-        case (sifun cname) of
-         NotWanted                     -> returnRn12 Nothing
-         Wanted                        -> full_thing
-         WantedWith (IEThingAll _)     -> full_thing
---???    WantedWith (IEThingAbs _)     -> returnRn12 (Just abs_class_decl')
-         WantedWith (IEClsWithOps _ _) -> full_thing
-         -- ToDo: add checking of IEClassWithOps
-         WantedWith really_weird_ie    -> -- probably a typo in the pgm
-           addErrRn12 (weirdImportExportConstraintErr
-                       cname really_weird_ie locn) `thenRn12` \ _ ->
-           full_thing
-      where
-       (clas, op_nf) = full_tc_nf cname
-       tc_nf = fst . full_tc_nf
-
-       sigs' = map (doIfaceClassOp1 op_nf tc_nf) sigs
-       ctxt' = doIfaceContext1 tc_nf ctxt
-
-       class_decl'     = ClassDecl ctxt' clas tyvar sigs' bs prags locn
-       abs_class_decl' = ClassDecl ctxt' clas tyvar []    bs prags locn
-\end{code}
-
-\begin{code}
-doIfaceClassOp1 :: IntNameFun  -- Use this for the class ops
-             -> IntNameFun     -- Use this for the types
-             -> ProtoNameClassOpSig
-             -> ProtoNameClassOpSig
-
-doIfaceClassOp1 op_nf tc_nf (ClassOpSig v ty pragma src_loc)
-  = ClassOpSig (op_nf v) (doIfacePolyType1 tc_nf ty) pragma src_loc
-\end{code}
-
-%************************************************************************
-%*                                                                     *
-\subsection{Instance declarations}
-%*                                                                     *
-%************************************************************************
-
-We select the instance decl if either the class or the type constructor
-are selected.
-
-\begin{code}
-doIfaceInstDecls1 :: SelectiveImporter
-               -> IntNameFun
-               -> [ProtoNameInstDecl]
-               -> [ProtoNameInstDecl]
-
-doIfaceInstDecls1 si tc_nf inst_decls
-  = catMaybes (map do_decl inst_decls)
-  where
-    do_decl (InstDecl context cname ty EmptyMonoBinds False modname imod uprags pragmas src_loc)
-      = case (si cname, tycon_reqd) of
-         (NotWanted, NotWanted) -> Nothing
-         _                      -> Just inst_decl'
-     where
-       context' = doIfaceContext1       tc_nf context
-       ty'     = doIfaceMonoType1 tc_nf ty
-
-       inst_decl' = InstDecl context' (tc_nf cname) ty' EmptyMonoBinds False modname imod uprags pragmas src_loc
-
-       tycon_reqd
-        = case getNonPrelOuterTyCon ty of
-            Nothing -> NotWanted    -- Type doesn't have a user-defined tycon
-                                    -- at its outermost level
-            Just tycon -> si tycon  -- It does, so look up in the si-fun
-\end{code}
-
-%************************************************************************
-%*                                                                     *
-\subsection{Signature declarations}
-%*                                                                     *
-%************************************************************************
-
-@doIfaceSigs1@ uses the name function to create a bag that
-maps local names into original names.
-
-NB: Can't have user-pragmas & other weird things in interfaces.
-
-\begin{code}
-doIfaceSigs1 :: SelectiveImporter -> IntNameFun -> IntNameFun
-          -> [ProtoNameSig]
-          -> [ProtoNameSig]
-
-doIfaceSigs1 si v_nf tc_nf sigs
-  = catMaybes (map do_sig sigs)
-  where
-    do_sig (Sig v ty pragma src_loc)
-      = case (si v) of
-         NotWanted -> Nothing
-         Wanted    -> Just (Sig (v_nf v) (doIfacePolyType1 tc_nf ty) pragma src_loc)
-         -- WantedWith doesn't make sense
-\end{code}
-
-
-%************************************************************************
-%*                                                                     *
-\subsection{Fixity declarations}
-%*                                                                     *
-%************************************************************************
-
-\begin{code}
-doIfaceFixes1 :: SelectiveImporter -> IntNameFun
-           -> [ProtoNameFixityDecl]
-           -> [ProtoNameFixityDecl]
-
-doIfaceFixes1 si vnf fixities
-  = catMaybes (map do_fixity fixities)
-  where
-    do_fixity (InfixL name i) = do_one InfixL name i
-    do_fixity (InfixR name i) = do_one InfixR name i
-    do_fixity (InfixN name i) = do_one InfixN name i
-
-    do_one con name i
-      = case si name of
-         Wanted    -> Just (con (vnf name) i)
-         NotWanted -> Nothing
-\end{code}
-
-
-%************************************************************************
-%*                                                                     *
-\subsection{doContext, MonoTypes, MonoType, Polytype}
-%*                                                                     *
-%************************************************************************
-
-\begin{code}
-doIfacePolyType1 :: IntNameFun -> ProtoNamePolyType -> ProtoNamePolyType
-
-doIfacePolyType1 tc_nf (UnoverloadedTy ty)
-  = UnoverloadedTy (doIfaceMonoType1 tc_nf ty)
-
-doIfacePolyType1 tc_nf (OverloadedTy ctxt ty)
-  = OverloadedTy (doIfaceContext1 tc_nf ctxt) (doIfaceMonoType1 tc_nf ty)
-\end{code}
-
-\begin{code}
-doIfaceContext1 :: IntNameFun -> ProtoNameContext -> ProtoNameContext
-doIfaceContext1 tc_nf  context = [(tc_nf clas, tyvar) | (clas,tyvar) <- context]
-\end{code}
-
-
-\begin{code}
-doIfaceMonoTypes1 :: IntNameFun -> [ProtoNameMonoType] -> [ProtoNameMonoType]
-doIfaceMonoTypes1 tc_nf tys = map (doIfaceMonoType1 tc_nf) tys
-\end{code}
-
-
-\begin{code}
-doIfaceMonoType1 :: IntNameFun -> ProtoNameMonoType -> ProtoNameMonoType
-
-doIfaceMonoType1 tc_nf (MonoTyVar tyvar) = MonoTyVar tyvar
-
-doIfaceMonoType1 tc_nf (ListMonoTy ty)
-  = ListMonoTy (doIfaceMonoType1 tc_nf ty)
-
-doIfaceMonoType1 tc_nf (FunMonoTy ty1 ty2)
-  = FunMonoTy (doIfaceMonoType1 tc_nf ty1) (doIfaceMonoType1 tc_nf ty2)
-
-doIfaceMonoType1 tc_nf (TupleMonoTy tys)
-  = TupleMonoTy (map (doIfacePolyType1 tc_nf) tys)
-
-doIfaceMonoType1 tc_nf (MonoTyCon name tys)
-  = MonoTyCon (tc_nf name) (doIfaceMonoTypes1 tc_nf tys)
-
-#ifdef DPH
-doIfaceMonoType1 tc_nf (MonoTyProc tys ty)
-  = MonoTyProc (doIfaceMonoTypes1 tc_nf tys) (doIfaceMonoType1 tc_nf ty)
-
-doIfaceMonoType1 tc_nf (MonoTyPod ty)
-  = MonoTyPod (doIfaceMonoType1 tc_nf ty)
-#endif {- Data Parallel Haskell -}
-\end{code}