packages feed

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 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