@@ -14,6 +14,7 @@ module Text.Parsing.Parser
1414
1515import Prelude
1616import Control.Alt (class Alt )
17+ import Control.Apply (lift2 )
1718import Control.Lazy (defer , class Lazy )
1819import Control.Monad.Error.Class (class MonadThrow , throwError )
1920import Control.Monad.Except (class MonadError , ExceptT (..), runExceptT , mapExceptT )
@@ -23,6 +24,7 @@ import Control.Monad.Trans.Class (class MonadTrans, lift)
2324import Control.MonadPlus (class Alternative , class MonadZero , class MonadPlus , class Plus )
2425import Data.Either (Either (..))
2526import Data.Identity (Identity )
27+ import Data.Monoid (class Monoid , mempty )
2628import Data.Newtype (class Newtype , unwrap )
2729import Data.Tuple (Tuple (..))
2830import Text.Parsing.Parser.Pos (Position , initialPos )
@@ -72,6 +74,12 @@ hoistParserT f (ParserT m) = ParserT (mapExceptT (mapStateT f) m)
7274instance lazyParserT :: Lazy (ParserT s m a ) where
7375 defer f = ParserT (ExceptT (defer (runExceptT <<< unwrap <<< f)))
7476
77+ instance semigroupParserT :: (Monad m , Semigroup a ) => Semigroup (ParserT s m a ) where
78+ append = lift2 (<>)
79+
80+ instance monoidParserT :: (Monad m , Monoid a ) => Monoid (ParserT s m a ) where
81+ mempty = pure mempty
82+
7583derive newtype instance functorParserT :: Functor m => Functor (ParserT s m )
7684derive newtype instance applyParserT :: Monad m => Apply (ParserT s m )
7785derive newtype instance applicativeParserT :: Monad m => Applicative (ParserT s m )
0 commit comments