{-# LANGUAGE FlexibleContexts #-} module Saturn.Unstable.Type.Weekday where import qualified Data.Coerce as Coerce import qualified Data.Set as Set import qualified Data.Text.Lazy.Builder as Builder import qualified Data.Word as Word import qualified Saturn.Unstable.Type.Field as Field import qualified Text.Parsec as Parsec newtype Weekday = Weekday Field.Field deriving (Weekday -> Weekday -> Bool (Weekday -> Weekday -> Bool) -> (Weekday -> Weekday -> Bool) -> Eq Weekday forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Weekday -> Weekday -> Bool == :: Weekday -> Weekday -> Bool $c/= :: Weekday -> Weekday -> Bool /= :: Weekday -> Weekday -> Bool Eq, Int -> Weekday -> ShowS [Weekday] -> ShowS Weekday -> String (Int -> Weekday -> ShowS) -> (Weekday -> String) -> ([Weekday] -> ShowS) -> Show Weekday forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> Weekday -> ShowS showsPrec :: Int -> Weekday -> ShowS $cshow :: Weekday -> String show :: Weekday -> String $cshowList :: [Weekday] -> ShowS showList :: [Weekday] -> ShowS Show) bounds :: (Word.Word8, Word.Word8) bounds :: (Word8, Word8) bounds = (Word8 0, Word8 6) fromField :: Field.Field -> Maybe Weekday fromField :: Field -> Maybe Weekday fromField Field field = if (Word8, Word8) -> Field -> Bool Field.isValid (Word8, Word8) bounds Field field then Weekday -> Maybe Weekday forall a. a -> Maybe a Just (Weekday -> Maybe Weekday) -> Weekday -> Maybe Weekday forall a b. (a -> b) -> a -> b $ Field -> Weekday Weekday Field field else Maybe Weekday forall a. Maybe a Nothing toField :: Weekday -> Field.Field toField :: Weekday -> Field toField = Weekday -> Field forall a b. Coercible a b => a -> b Coerce.coerce parsec :: (Parsec.Stream s m Char) => Parsec.ParsecT s u m Weekday parsec :: forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Weekday parsec = do Field field <- ParsecT s u m Field forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Field Field.parsec ParsecT s u m Weekday -> (Weekday -> ParsecT s u m Weekday) -> Maybe Weekday -> ParsecT s u m Weekday forall b a. b -> (a -> b) -> Maybe a -> b maybe (String -> ParsecT s u m Weekday forall a. String -> ParsecT s u m a forall (m :: * -> *) a. MonadFail m => String -> m a fail String "invalid Weekday") Weekday -> ParsecT s u m Weekday forall a. a -> ParsecT s u m a forall (f :: * -> *) a. Applicative f => a -> f a pure (Maybe Weekday -> ParsecT s u m Weekday) -> Maybe Weekday -> ParsecT s u m Weekday forall a b. (a -> b) -> a -> b $ Field -> Maybe Weekday fromField Field field toBuilder :: Weekday -> Builder.Builder toBuilder :: Weekday -> Builder toBuilder = Field -> Builder Field.toBuilder (Field -> Builder) -> (Weekday -> Field) -> Weekday -> Builder forall b c a. (b -> c) -> (a -> b) -> a -> c . Weekday -> Field toField expand :: Weekday -> Set.Set Word.Word8 expand :: Weekday -> Set Word8 expand = (Word8, Word8) -> Field -> Set Word8 Field.expand (Word8, Word8) bounds (Field -> Set Word8) -> (Weekday -> Field) -> Weekday -> Set Word8 forall b c a. (b -> c) -> (a -> b) -> a -> c . Weekday -> Field toField isMatch :: Word.Word8 -> Weekday -> Bool isMatch :: Word8 -> Weekday -> Bool isMatch Word8 word8 = Word8 -> Set Word8 -> Bool forall a. Ord a => a -> Set a -> Bool Set.member Word8 word8 (Set Word8 -> Bool) -> (Weekday -> Set Word8) -> Weekday -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . Weekday -> Set Word8 expand