module Data.SpirV.Enum.OverflowModes where import Data.String (IsString(..)) import Data.Word (Word32) import Foreign (Storable(..)) import GHC.Read (Read(..)) import Text.ParserCombinators.ReadPrec (pfail) import qualified GHC.Read as Read import qualified Text.Read.Lex as Lex newtype OverflowModes = OverflowModes Word32 deriving (Eq, Ord, Storable) pattern WRAP :: OverflowModes pattern WRAP = OverflowModes 0 pattern SAT :: OverflowModes pattern SAT = OverflowModes 1 pattern SAT_ZERO :: OverflowModes pattern SAT_ZERO = OverflowModes 2 pattern SAT_SYM :: OverflowModes pattern SAT_SYM = OverflowModes 3 toName :: IsString a => OverflowModes -> a toName x = case x of WRAP -> "WRAP" SAT -> "SAT" SAT_ZERO -> "SAT_ZERO" SAT_SYM -> "SAT_SYM" unknown -> fromString $ "OverflowModes " ++ show unknown instance Show OverflowModes where show = toName fromName :: (IsString a, Eq a) => a -> Maybe OverflowModes fromName x = case x of "WRAP" -> Just WRAP "SAT" -> Just SAT "SAT_ZERO" -> Just SAT_ZERO "SAT_SYM" -> Just SAT_SYM _unknown -> Nothing instance Read OverflowModes where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s