packages feed

mini 1.1.1.0 → 1.2.0.0

raw patch · 3 files changed

+28/−26 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Mini.Transformers.ParserT: instance GHC.Show.Show s => GHC.Show.Show (Mini.Transformers.ParserT.ParseError s)
+ Mini.Transformers.ParserT: instance GHC.Base.Monoid Mini.Transformers.ParserT.ParseError
+ Mini.Transformers.ParserT: instance GHC.Base.Semigroup Mini.Transformers.ParserT.ParseError
+ Mini.Transformers.ParserT: instance GHC.Show.Show Mini.Transformers.ParserT.ParseError
- Mini.Transformers.ParserT: ParserT :: ([s] -> m (Either [ParseError s] (a, [s]))) -> ParserT s m a
+ Mini.Transformers.ParserT: ParserT :: ([s] -> m (Either ParseError (a, [s]))) -> ParserT s m a
- Mini.Transformers.ParserT: data ParseError s
+ Mini.Transformers.ParserT: data ParseError
- Mini.Transformers.ParserT: eof :: Applicative m => ParserT s m ()
+ Mini.Transformers.ParserT: eof :: (Applicative m, Show s) => ParserT s m ()
- Mini.Transformers.ParserT: item :: Applicative m => ParserT s m s
+ Mini.Transformers.ParserT: item :: (Applicative m, Show s) => ParserT s m s
- Mini.Transformers.ParserT: noneOf :: (Applicative m, Foldable t, Eq s) => t s -> ParserT s m s
+ Mini.Transformers.ParserT: noneOf :: (Applicative m, Foldable t, Show s, Eq s) => t s -> ParserT s m s
- Mini.Transformers.ParserT: oneOf :: (Applicative m, Foldable t, Eq s) => t s -> ParserT s m s
+ Mini.Transformers.ParserT: oneOf :: (Applicative m, Foldable t, Show s, Eq s) => t s -> ParserT s m s
- Mini.Transformers.ParserT: runParserT :: ParserT s m a -> [s] -> m (Either [ParseError s] (a, [s]))
+ Mini.Transformers.ParserT: runParserT :: ParserT s m a -> [s] -> m (Either ParseError (a, [s]))
- Mini.Transformers.ParserT: sat :: Applicative m => (s -> Bool) -> ParserT s m s
+ Mini.Transformers.ParserT: sat :: (Applicative m, Show s) => (s -> Bool) -> ParserT s m s
- Mini.Transformers.ParserT: string :: (Monad m, Traversable t, Eq s) => t s -> ParserT s m (t s)
+ Mini.Transformers.ParserT: string :: (Monad m, Traversable t, Show s, Eq s) => t s -> ParserT s m (t s)
- Mini.Transformers.ParserT: symbol :: (Applicative m, Eq s) => s -> ParserT s m s
+ Mini.Transformers.ParserT: symbol :: (Applicative m, Show s, Eq s) => s -> ParserT s m s

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+1.2.0.0 [2024-03-15]+--------------------+* Mini.Transformers.ParserT:+    * Simplify parse errors+ 1.1.1.0 [2024-03-14] -------------------- * Mini.Transformers.ParserT:
Mini/Transformers/ParserT.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE TupleSections #-} @@ -52,6 +53,9 @@ import Data.Functor (   (<&>),  )+import Data.List (+  intersperse,+ ) import Mini.Transformers.Class (   MonadTrans (     lift@@ -64,7 +68,7 @@  -- | A transformer parsing symbols /s/, inner monad /m/, return /a/ newtype ParserT s m a = ParserT-  { runParserT :: [s] -> m (Either [ParseError s] (a, [s]))+  { runParserT :: [s] -> m (Either ParseError (a, [s]))   -- ^ Unwrap a 'ParserT' computation with a sequence of symbols to parse   } @@ -76,7 +80,7 @@   (<*>) = ap  instance (Monad m, Eq s) => Alternative (ParserT s m) where-  empty = ParserT . const . pure $ Left [EmptyError]+  empty = ParserT . const . pure $ Left mempty   m <|> n = ParserT $ \ss ->     runParserT m ss       >>= either@@ -106,61 +110,54 @@   mempty = pure mempty  instance (Monad m) => MonadFail (ParserT s m) where-  fail msg = ParserT . const . pure $ Left [FailError msg]+  fail = ParserT . const . pure . Left . ParseError . pure --- | Abstract representation of a parse error for symbols /s/-data ParseError s-  = EndOfInput-  | Unexpected s-  | EmptyError-  | FailError String+-- | Abstract representation of a parse error+newtype ParseError = ParseError [String]+  deriving (Semigroup, Monoid) -instance (Show s) => Show (ParseError s) where-  show = \case-    EndOfInput -> "unexpected EOF"-    Unexpected s -> "unexpected " <> show s-    EmptyError -> "empty"-    FailError msg -> msg+instance Show ParseError where+  show (ParseError es) = "(parse error: " <> concat (intersperse ", " es) <> ")"  {-  - Parsers  -}  -- | Parse symbols satisfying a predicate-sat :: (Applicative m) => (s -> Bool) -> ParserT s m s+sat :: (Applicative m, Show s) => (s -> Bool) -> ParserT s m s sat p = ParserT $ \case-  [] -> pure $ Left [EndOfInput]+  [] -> pure . Left $ ParseError ["end of input"]   (s : ss) ->     bool-      (pure $ Left [Unexpected s])+      (pure . Left $ ParseError ["unexpected " <> show s])       (pure $ Right (s, ss))       $ p s  -- | Parse any symbol-item :: (Applicative m) => ParserT s m s+item :: (Applicative m, Show s) => ParserT s m s item = sat $ const True  -- | Parse a symbol-symbol :: (Applicative m, Eq s) => s -> ParserT s m s+symbol :: (Applicative m, Show s, Eq s) => s -> ParserT s m s symbol = sat . (==)  -- | Parse a sequence of symbols-string :: (Monad m, Traversable t, Eq s) => t s -> ParserT s m (t s)+string :: (Monad m, Traversable t, Show s, Eq s) => t s -> ParserT s m (t s) string = traverse symbol  -- | Parse symbols included in a collection-oneOf :: (Applicative m, Foldable t, Eq s) => t s -> ParserT s m s+oneOf :: (Applicative m, Foldable t, Show s, Eq s) => t s -> ParserT s m s oneOf = sat . flip elem  -- | Parse symbols excluded from a collection-noneOf :: (Applicative m, Foldable t, Eq s) => t s -> ParserT s m s+noneOf :: (Applicative m, Foldable t, Show s, Eq s) => t s -> ParserT s m s noneOf = sat . flip notElem  -- | Parse successfully only at end of input-eof :: (Applicative m) => ParserT s m ()+eof :: (Applicative m, Show s) => ParserT s m () eof = ParserT $ \case   [] -> pure $ Right ((), [])-  (s : _) -> pure $ Left [Unexpected s]+  (s : _) -> pure . Left $ ParseError ["unexpected " <> show s]  {-  - Combinators
mini.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               mini-version:            1.1.1.0+version:            1.2.0.0 license:            MIT license-file:       LICENSE copyright:          (c) 2023-2024 Victor Wallsten