mini 1.2.1.0 → 1.2.2.0
raw patch · 3 files changed
+50/−8 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Mini.Transformers.ParserT: accept :: Monad m => ParserT s m a -> ParserT s m a
+ Mini.Transformers.ParserT: reject :: (Monad m, Show a) => ParserT s m a -> ParserT s m ()
- Mini.Transformers.ParserT: eof :: (Applicative m, Show s) => ParserT s m ()
+ Mini.Transformers.ParserT: eof :: (Monad m, Show s) => ParserT s m ()
Files
- CHANGELOG.md +6/−0
- Mini/Transformers/ParserT.hs +43/−7
- mini.cabal +1/−1
CHANGELOG.md view
@@ -1,3 +1,9 @@+1.2.2.0 [2024-03-20]+--------------------+* Mini.Transformers.ParserT:+ * Add combinator 'reject'+ * Add combinator 'accept'+ 1.2.1.0 [2024-03-16] -------------------- * Add Mini.Transformers.ReaderT.local
Mini/Transformers/ParserT.hs view
@@ -33,6 +33,8 @@ chainr1, between, option,+ reject,+ accept, ) where import Control.Applicative (@@ -79,6 +81,7 @@ pure a = ParserT $ pure . Right . (a,) (<*>) = ap +-- | TODO instance (Monad m, Eq s) => Alternative (ParserT s m) where empty = ParserT . const . pure $ Left mempty m <|> n = ParserT $ \ss ->@@ -103,6 +106,7 @@ instance MonadTrans (ParserT s) where lift m = ParserT $ \ss -> m <&> Right . (,ss) +-- | Combine the results of @p@ and @q@ via @p <> q@ instance (Monad m, Semigroup a) => Semigroup (ParserT s m a) where m <> n = (<>) <$> m <*> n @@ -123,7 +127,13 @@ - Parsers -} --- | Parse symbols satisfying a predicate+{- | Parse symbols satisfying a predicate++=== __Examples__++>>> runParserT (string "foe" <|> string "foo") "foobar"+Right ("foo","bar")+-} sat :: (Applicative m, Show s) => (s -> Bool) -> ParserT s m s sat p = ParserT $ \case [] -> pure . Left $ ParseError ["end of input"]@@ -133,11 +143,23 @@ (pure $ Right (s, ss)) $ p s --- | Parse any symbol+{- | Parse any symbol++=== __Examples__++>>> runParserT (item *> item <* item) "bar"+Right ('a',"")+-} item :: (Applicative m, Show s) => ParserT s m s item = sat $ const True --- | Parse a symbol+{- | Parse a symbol++=== __Examples__++>>> runParserT (EXAMPLE) "STRING"+Right (RESULT,"REST")+-} symbol :: (Applicative m, Show s, Eq s) => s -> ParserT s m s symbol = sat . (==) @@ -154,10 +176,8 @@ noneOf = sat . flip notElem -- | Parse successfully only at end of input-eof :: (Applicative m, Show s) => ParserT s m ()-eof = ParserT $ \case- [] -> pure $ Right ((), [])- (s : _) -> pure . Left $ ParseError ["unexpected " <> show s]+eof :: (Monad m, Show s) => ParserT s m ()+eof = reject item {- - Combinators@@ -230,3 +250,19 @@ -- | Parse @p@ returning @a@ in case of failure via @option a p@ option :: (Monad m, Eq s) => a -> ParserT s m a -> ParserT s m a option a p = p <|> pure a++-- | Parse @p@, without consuming input, iff @p@ fails via @reject p@+reject :: (Monad m, Show a) => ParserT s m a -> ParserT s m ()+reject p = ParserT $ \ss ->+ runParserT p ss+ >>= either+ (const . pure $ Right ((), ss))+ (pure . Left . ParseError . pure . mappend "unexpected " . show . fst)++-- | Parse @p@, without consuming input, iff @p@ succeeds via @accept p@+accept :: (Monad m) => ParserT s m a -> ParserT s m a+accept p = ParserT $ \ss ->+ runParserT p ss+ >>= either+ (pure . Left)+ (pure . Right . (,ss) . fst)
mini.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: mini-version: 1.2.1.0+version: 1.2.2.0 license: MIT license-file: LICENSE copyright: (c) 2023-2024 Victor Wallsten