module UHC.Light.Compiler.CHR.CtxtRedOnly.Guard ( Guard (..) ) where import UHC.Util.CHR import UHC.Light.Compiler.CHR.CtxtRedOnly.Key import UHC.Util.Pretty import UHC.Light.Compiler.Base.Common import UHC.Light.Compiler.Ty import Control.Monad import UHC.Util.Binary import UHC.Util.Serialize {-# LINE 39 "src/ehc/CHR/CtxtRedOnly/Guard.chs" #-} data Guard = HasStrictCommonScope PredScope PredScope PredScope -- have strict/proper common scope? | IsVisibleInScope PredScope PredScope -- is visible in 2nd scope? | NotEqualScope PredScope PredScope -- scopes are unequal | EqualScope PredScope PredScope -- scopes are equal | IsStrictParentScope PredScope PredScope PredScope -- parent scope of each other? | NonEmptyRowLacksLabel Ty LabelOffset Ty Label -- non empty row does not have label?, yielding its position + rest deriving (Typeable, Generic) {-# LINE 60 "src/ehc/CHR/CtxtRedOnly/Guard.chs" #-} ppGuard :: Guard -> PP_Doc ppGuard (HasStrictCommonScope sc1 sc2 sc3) = ppParensCommas' [sc1 >#< "<" >#< sc2,sc1 >#< "<=" >#< sc3] ppGuard (IsStrictParentScope sc1 sc2 sc3) = ppParens (sc1 >#< "==" >#< sc2 >#< "/\\" >#< sc2 >#< "/=" >#< sc3) ppGuard (IsVisibleInScope sc1 sc2 ) = sc1 >#< "`visibleIn`" >#< sc2 ppGuard (NotEqualScope sc1 sc2 ) = sc1 >#< "/=" >#< sc2 ppGuard (EqualScope sc1 sc2 ) = sc1 >#< "==" >#< sc2 ppGuard (NonEmptyRowLacksLabel r o t l ) = ppParens (t >#< "==" >#< ppParens (r >#< "| ...")) >#< "\\" >#< l >|< "@" >|< o {-# LINE 79 "src/ehc/CHR/CtxtRedOnly/Guard.chs" #-} instance Show Guard where show _ = "CHR Guard" instance PP Guard where pp = ppGuard {-# LINE 91 "src/ehc/CHR/CtxtRedOnly/Guard.chs" #-} instance Serialize Guard