{-# LANGUAGE PatternSynonyms #-} module Satyros.QFIDL.Variable ( Variable(ZeroVariable, Variable) ) where import GHC.Generics (Generic) newtype Variable = VariableInternal Word deriving stock ((forall x. Variable -> Rep Variable x) -> (forall x. Rep Variable x -> Variable) -> Generic Variable forall x. Rep Variable x -> Variable forall x. Variable -> Rep Variable x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep Variable x -> Variable $cfrom :: forall x. Variable -> Rep Variable x Generic, Variable -> Variable -> Bool (Variable -> Variable -> Bool) -> (Variable -> Variable -> Bool) -> Eq Variable forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Variable -> Variable -> Bool $c/= :: Variable -> Variable -> Bool == :: Variable -> Variable -> Bool $c== :: Variable -> Variable -> Bool Eq, Eq Variable Eq Variable -> (Variable -> Variable -> Ordering) -> (Variable -> Variable -> Bool) -> (Variable -> Variable -> Bool) -> (Variable -> Variable -> Bool) -> (Variable -> Variable -> Bool) -> (Variable -> Variable -> Variable) -> (Variable -> Variable -> Variable) -> Ord Variable Variable -> Variable -> Bool Variable -> Variable -> Ordering Variable -> Variable -> Variable forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: Variable -> Variable -> Variable $cmin :: Variable -> Variable -> Variable max :: Variable -> Variable -> Variable $cmax :: Variable -> Variable -> Variable >= :: Variable -> Variable -> Bool $c>= :: Variable -> Variable -> Bool > :: Variable -> Variable -> Bool $c> :: Variable -> Variable -> Bool <= :: Variable -> Variable -> Bool $c<= :: Variable -> Variable -> Bool < :: Variable -> Variable -> Bool $c< :: Variable -> Variable -> Bool compare :: Variable -> Variable -> Ordering $ccompare :: Variable -> Variable -> Ordering $cp1Ord :: Eq Variable Ord) deriving newtype (Int -> Variable -> ShowS [Variable] -> ShowS Variable -> String (Int -> Variable -> ShowS) -> (Variable -> String) -> ([Variable] -> ShowS) -> Show Variable forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Variable] -> ShowS $cshowList :: [Variable] -> ShowS show :: Variable -> String $cshow :: Variable -> String showsPrec :: Int -> Variable -> ShowS $cshowsPrec :: Int -> Variable -> ShowS Show) pattern ZeroVariable :: Variable pattern $bZeroVariable :: Variable $mZeroVariable :: forall r. Variable -> (Void# -> r) -> (Void# -> r) -> r ZeroVariable = VariableInternal 0 pattern Variable :: Word -> Variable pattern $bVariable :: Word -> Variable $mVariable :: forall r. Variable -> (Word -> r) -> (Void# -> r) -> r Variable v <- VariableInternal v where Variable Word v | Word v Word -> Word -> Bool forall a. Ord a => a -> a -> Bool > Word 0 = Word -> Variable VariableInternal Word v | Bool otherwise = String -> Variable forall a. HasCallStack => String -> a error String "Zero is not a valid variable" {-# COMPLETE ZeroVariable, Variable #-}