SYN_IE(Version), SYN_IE(Arity),
SYN_IE(Module), moduleString, pprModule,
Fixity(..), FixityDirection(..),
- NewOrData(..)
+ NewOrData(..), IfaceFlavour(..)
) where
IMP_Ubiq()
pprModule sty m = ptext m
\end{code}
+%************************************************************************
+%* *
+\subsection[IfaceFlavour]{IfaceFlavour}
+%* *
+%************************************************************************
+
+The IfaceFlavour type is used mainly in an imported Name's Provenance
+to say whether the name comes from a regular .hi file, or whether it comes
+from a hand-written .hi-boot file. This is important, because it has to be
+propagated. Suppose
+
+ C.hs imports B
+ B.hs imports A
+ A.hs imports C {-# SOURCE -#} ( f )
+
+Then in A.hi we may mention C.f, in an inlining. When compiling B we *must not*
+read C.f's details from C.hi, even if the latter happens to exist from an earlier
+compilation run. So we use the name "C!f" in A.hi, and when looking for an interface
+file with details of C!f we look in C.hi-boot. The "!" stuff is recorded in the
+IfaceFlavour in the Name of C.f in A.
+
+Not particularly beautiful, but it works.
+
+\begin{code}
+data IfaceFlavour = HiFile -- The interface was read from a standard interface file
+ | HiBootFile -- ... or from a handwritten "hi-boot" interface file
+
+instance Text IfaceFlavour where -- Just used in debug prints of lex tokens
+ showsPrec n HiFile s = s
+ showsPrec n HiBootFile s = "!" ++ s
+\end{code}
+
%************************************************************************
%* *