diff --git a/CHANGELOG.md b/CHANGELOG.md index f6a0943..c82852e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ Breaking changes: New features: +- add `MonadAsk` and `MonadReader` instances (#208 by @bentongxyz) + Other improvements: ## [v10.0.0](https://github.com/purescript-contrib/purescript-parsing/releases/tag/v9.1.0) - 2022-07-18 diff --git a/src/Parsing.purs b/src/Parsing.purs index f25609d..ee6fb29 100644 --- a/src/Parsing.purs +++ b/src/Parsing.purs @@ -33,6 +33,7 @@ import Control.Alt (class Alt) import Control.Apply (lift2) import Control.Lazy (class Lazy) import Control.Monad.Error.Class (class MonadError, class MonadThrow, catchError, throwError) +import Control.Monad.Reader.Class (class MonadAsk, class MonadReader, ask, local) import Control.Monad.Rec.Class (class MonadRec, Step(..), tailRecM) import Control.Monad.State.Class (class MonadState, state) import Control.Monad.Trans.Class (class MonadTrans, lift) @@ -278,6 +279,15 @@ instance MonadRec (ParserT s m) where instance (MonadState t m) => MonadState t (ParserT s m) where state k = lift (state k) +instance (MonadAsk r m) => MonadAsk r (ParserT s m) where + ask = lift ask + +instance (MonadReader r m) => MonadReader r (ParserT s m) where + local f (ParserT k) = ParserT + ( mkFn5 \state1 more lift throw done -> + runFn5 k state1 more (lift <<< local f) throw done + ) + instance MonadThrow ParseError (ParserT s m) where throwError err = ParserT ( mkFn5 \state1 _ _ throw _ ->