{-# LANGUAGE GeneralisedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE UndecidableInstances #-}
module Language.Haskell.Syntax.Decls.Overlap where
import Control.DeepSeq
import Data.Eq
import Prelude
import Language.Haskell.Syntax.Extension
data OverlapMode pass
= NoOverlap (XOverlapMode pass)
| Overlappable (XOverlapMode pass)
| Overlapping (XOverlapMode pass)
| Overlaps (XOverlapMode pass)
| Incoherent (XOverlapMode pass)
| NonCanonical (XOverlapMode pass)
| XOverlapMode !(XXOverlapMode pass)
deriving instance ( Eq (XOverlapMode pass)
, Eq (XXOverlapMode pass)
) => Eq (OverlapMode pass)
instance ( NFData (XOverlapMode pass)
, NFData (XXOverlapMode pass)
) => NFData (OverlapMode pass) where
rnf :: OverlapMode pass -> ()
rnf = \case
NoOverlap XOverlapMode pass
s -> XOverlapMode pass -> ()
forall a. NFData a => a -> ()
rnf XOverlapMode pass
s
Overlappable XOverlapMode pass
s -> XOverlapMode pass -> ()
forall a. NFData a => a -> ()
rnf XOverlapMode pass
s
Overlapping XOverlapMode pass
s -> XOverlapMode pass -> ()
forall a. NFData a => a -> ()
rnf XOverlapMode pass
s
Overlaps XOverlapMode pass
s -> XOverlapMode pass -> ()
forall a. NFData a => a -> ()
rnf XOverlapMode pass
s
Incoherent XOverlapMode pass
s -> XOverlapMode pass -> ()
forall a. NFData a => a -> ()
rnf XOverlapMode pass
s
NonCanonical XOverlapMode pass
s -> XOverlapMode pass -> ()
forall a. NFData a => a -> ()
rnf XOverlapMode pass
s
XOverlapMode XXOverlapMode pass
s -> XXOverlapMode pass -> ()
forall a. NFData a => a -> ()
rnf XXOverlapMode pass
s
hasIncoherentFlag :: OverlapMode p -> Bool
hasIncoherentFlag :: forall p. OverlapMode p -> Bool
hasIncoherentFlag OverlapMode p
mode =
case OverlapMode p
mode of
Incoherent XOverlapMode p
_ -> Bool
True
NonCanonical XOverlapMode p
_ -> Bool
True
OverlapMode p
_ -> Bool
False
hasOverlappableFlag :: OverlapMode p -> Bool
hasOverlappableFlag :: forall p. OverlapMode p -> Bool
hasOverlappableFlag OverlapMode p
mode =
case OverlapMode p
mode of
Overlappable XOverlapMode p
_ -> Bool
True
Overlaps XOverlapMode p
_ -> Bool
True
Incoherent XOverlapMode p
_ -> Bool
True
NonCanonical XOverlapMode p
_ -> Bool
True
OverlapMode p
_ -> Bool
False
hasOverlappingFlag :: OverlapMode p -> Bool
hasOverlappingFlag :: forall p. OverlapMode p -> Bool
hasOverlappingFlag OverlapMode p
mode =
case OverlapMode p
mode of
Overlapping XOverlapMode p
_ -> Bool
True
Overlaps XOverlapMode p
_ -> Bool
True
Incoherent XOverlapMode p
_ -> Bool
True
NonCanonical XOverlapMode p
_ -> Bool
True
OverlapMode p
_ -> Bool
False
hasNonCanonicalFlag :: OverlapMode p -> Bool
hasNonCanonicalFlag :: forall p. OverlapMode p -> Bool
hasNonCanonicalFlag = \case
NonCanonical{} -> Bool
True
OverlapMode p
_ -> Bool
False