module Data.SpirV.Enum.FPDenormMode 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 FPDenormMode = FPDenormMode Word32 deriving (Eq, Ord, Storable) pattern Preserve :: FPDenormMode pattern Preserve = FPDenormMode 0 pattern FlushToZero :: FPDenormMode pattern FlushToZero = FPDenormMode 1 toName :: IsString a => FPDenormMode -> a toName x = case x of Preserve -> "Preserve" FlushToZero -> "FlushToZero" unknown -> fromString $ "FPDenormMode " ++ show unknown instance Show FPDenormMode where show = toName fromName :: (IsString a, Eq a) => a -> Maybe FPDenormMode fromName x = case x of "Preserve" -> Just Preserve "FlushToZero" -> Just FlushToZero _unknown -> Nothing instance Read FPDenormMode where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s