[project @ 1999-07-26 15:31:01 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / BasicTypes.lhs
index 11c16fe..ded171f 100644 (file)
@@ -16,8 +16,11 @@ types that
 module BasicTypes(
        Version, Arity, 
        Unused, unused,
-       Fixity(..), FixityDirection(..), StrictnessMark(..),
-       NewOrData(..), IfaceFlavour(..), TopLevelFlag(..), RecFlag(..)
+       Fixity(..), FixityDirection(..),
+       defaultFixity, maxPrecedence, negateFixity, negatePrecedence,
+       NewOrData(..), 
+       RecFlag(..), isRec, isNonRec,
+       TopLevelFlag(..), isTopLevel, isNotTopLevel
    ) where
 
 #include "HsVersions.h"
@@ -65,39 +68,6 @@ type Version = Int
 
 %************************************************************************
 %*                                                                     *
-\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}
-
-
-%************************************************************************
-%*                                                                     *
 \subsection[Fixity]{Fixity info}
 %*                                                                     *
 %************************************************************************
@@ -117,6 +87,15 @@ instance Outputable FixityDirection where
 
 instance Eq Fixity where               -- Used to determine if two fixities conflict
   (Fixity p1 dir1) == (Fixity p2 dir2) = p1==p2 && dir1 == dir2
+
+maxPrecedence = (9::Int)
+defaultFixity = Fixity maxPrecedence InfixL
+
+negateFixity :: Fixity
+negateFixity     = Fixity negatePrecedence InfixL      -- Precedence of unary negate is wired in as infixl 6!
+
+negatePrecedence :: Int
+negatePrecedence = 6
 \end{code}
 
 
@@ -134,9 +113,6 @@ data NewOrData
   deriving( Eq )       -- Needed because Demand derives Eq
 \end{code}
 
-The @RecFlag@ tells whether the thing is part of a recursive group or not.
-
-
 %************************************************************************
 %*                                                                     *
 \subsection[Top-level/local]{Top-level/not-top level flag}
@@ -147,27 +123,31 @@ The @RecFlag@ tells whether the thing is part of a recursive group or not.
 data TopLevelFlag
   = TopLevel
   | NotTopLevel
-\end{code}
 
+isTopLevel, isNotTopLevel :: TopLevelFlag -> Bool
+
+isNotTopLevel NotTopLevel = True
+isNotTopLevel TopLevel    = False
+
+isTopLevel TopLevel    = True
+isTopLevel NotTopLevel  = False
+\end{code}
 
 %************************************************************************
 %*                                                                     *
-\subsection[Top-level/local]{Top-level/not-top level flag}
+\subsection[Recursive/Non-Recursive]{Recursive/Non-Recursive flag}
 %*                                                                     *
 %************************************************************************
 
 \begin{code} 
 data RecFlag = Recursive 
             | NonRecursive
-\end{code}
 
-%************************************************************************
-%*                                                                     *
-\subsection{Strictness indication}
-%*                                                                     *
-%************************************************************************
+isRec :: RecFlag -> Bool
+isRec Recursive    = True
+isRec NonRecursive = False
 
-\begin{code}
-data StrictnessMark = MarkedStrict
-                   | NotMarkedStrict
+isNonRec :: RecFlag -> Bool
+isNonRec Recursive    = False
+isNonRec NonRecursive = True
 \end{code}