X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FbasicTypes%2FBasicTypes.lhs;h=0dbd0f6c0991e9fd0d41948e5f5475d5a5bf84f8;hb=a97f155c04a7ff981da3e589158ecf70db72d1cd;hp=6b662bd6a64c18c590d9dc541187fe88e13d1c79;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/compiler/basicTypes/BasicTypes.lhs b/compiler/basicTypes/BasicTypes.lhs index 6b662bd..0dbd0f6 100644 --- a/compiler/basicTypes/BasicTypes.lhs +++ b/compiler/basicTypes/BasicTypes.lhs @@ -31,6 +31,8 @@ module BasicTypes( TopLevelFlag(..), isTopLevel, isNotTopLevel, + OverlapFlag(..), + Boxity(..), isBoxed, TupCon(..), tupleParens, @@ -217,7 +219,7 @@ instance Outputable TopLevelFlag where %************************************************************************ %* * -\subsection[Top-level/local]{Top-level/not-top level flag} + Top-level/not-top level flag %* * %************************************************************************ @@ -235,7 +237,7 @@ isBoxed Unboxed = False %************************************************************************ %* * -\subsection[Recursive/Non-Recursive]{Recursive/Non-Recursive flag} + Recursive/Non-Recursive flag %* * %************************************************************************ @@ -263,6 +265,47 @@ instance Outputable RecFlag where %************************************************************************ %* * + Instance overlap flag +%* * +%************************************************************************ + +\begin{code} +data OverlapFlag + = NoOverlap -- This instance must not overlap another + + | OverlapOk -- Silently ignore this instance if you find a + -- more specific one that matches the constraint + -- you are trying to resolve + -- + -- Example: constraint (Foo [Int]) + -- instances (Foo [Int]) + -- (Foo [a]) OverlapOk + -- Since the second instance has the OverlapOk flag, + -- the first instance will be chosen (otherwise + -- its ambiguous which to choose) + + | Incoherent -- Like OverlapOk, but also ignore this instance + -- if it doesn't match the constraint you are + -- trying to resolve, but could match if the type variables + -- in the constraint were instantiated + -- + -- Example: constraint (Foo [b]) + -- instances (Foo [Int]) Incoherent + -- (Foo [a]) + -- Without the Incoherent flag, we'd complain that + -- instantiating 'b' would change which instance + -- was chosen + deriving( Eq ) + +instance Outputable OverlapFlag where + ppr NoOverlap = empty + ppr OverlapOk = ptext SLIT("[overlap ok]") + ppr Incoherent = ptext SLIT("[incoherent]") + +\end{code} + +%************************************************************************ +%* * Tuples %* * %************************************************************************