@@ -14,6 +14,7 @@ module Text.Parsing.Parser
14
14
15
15
import Prelude
16
16
import Control.Alt (class Alt )
17
+ import Control.Apply (lift2 )
17
18
import Control.Lazy (defer , class Lazy )
18
19
import Control.Monad.Error.Class (class MonadThrow , throwError )
19
20
import Control.Monad.Except (class MonadError , ExceptT (..), runExceptT , mapExceptT )
@@ -23,6 +24,7 @@ import Control.Monad.Trans.Class (class MonadTrans, lift)
23
24
import Control.MonadPlus (class Alternative , class MonadZero , class MonadPlus , class Plus )
24
25
import Data.Either (Either (..))
25
26
import Data.Identity (Identity )
27
+ import Data.Monoid (class Monoid , mempty )
26
28
import Data.Newtype (class Newtype , unwrap )
27
29
import Data.Tuple (Tuple (..))
28
30
import Text.Parsing.Parser.Pos (Position , initialPos )
@@ -72,6 +74,12 @@ hoistParserT f (ParserT m) = ParserT (mapExceptT (mapStateT f) m)
72
74
instance lazyParserT :: Lazy (ParserT s m a ) where
73
75
defer f = ParserT (ExceptT (defer (runExceptT <<< unwrap <<< f)))
74
76
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
+
75
83
derive newtype instance functorParserT :: Functor m => Functor (ParserT s m )
76
84
derive newtype instance applyParserT :: Monad m => Apply (ParserT s m )
77
85
derive newtype instance applicativeParserT :: Monad m => Applicative (ParserT s m )
0 commit comments