{-# LANGUAGE UndecidableInstances #-} module Bowtie.Rewrite where import Bowtie (Jot, pattern JotP) import Control.Exception (Exception) import Control.Monad ((>=>)) import Control.Monad.Except (ExceptT (..), MonadError (..), runExceptT) import Control.Monad.IO.Class (MonadIO (..)) import Control.Monad.Identity (Identity (..)) import Control.Monad.Reader (MonadReader (..), ReaderT (..), asks) import Control.Monad.State (MonadState (..)) import Control.Monad.Trans (MonadTrans (..)) import Data.Bitraversable (Bitraversable (..)) import Data.Sequence.NonEmpty (NESeq) import Data.Sequence.NonEmpty qualified as NESeq import Data.Typeable (Typeable) import Data.Void (Void, absurd) data AnnoErr k e = AnnoErr { forall k e. AnnoErr k e -> k annoErrKey :: !k , forall k e. AnnoErr k e -> e annoErrVal :: !e } deriving stock (AnnoErr k e -> AnnoErr k e -> Bool (AnnoErr k e -> AnnoErr k e -> Bool) -> (AnnoErr k e -> AnnoErr k e -> Bool) -> Eq (AnnoErr k e) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall k e. (Eq k, Eq e) => AnnoErr k e -> AnnoErr k e -> Bool $c== :: forall k e. (Eq k, Eq e) => AnnoErr k e -> AnnoErr k e -> Bool == :: AnnoErr k e -> AnnoErr k e -> Bool $c/= :: forall k e. (Eq k, Eq e) => AnnoErr k e -> AnnoErr k e -> Bool /= :: AnnoErr k e -> AnnoErr k e -> Bool Eq, Eq (AnnoErr k e) Eq (AnnoErr k e) => (AnnoErr k e -> AnnoErr k e -> Ordering) -> (AnnoErr k e -> AnnoErr k e -> Bool) -> (AnnoErr k e -> AnnoErr k e -> Bool) -> (AnnoErr k e -> AnnoErr k e -> Bool) -> (AnnoErr k e -> AnnoErr k e -> Bool) -> (AnnoErr k e -> AnnoErr k e -> AnnoErr k e) -> (AnnoErr k e -> AnnoErr k e -> AnnoErr k e) -> Ord (AnnoErr k e) AnnoErr k e -> AnnoErr k e -> Bool AnnoErr k e -> AnnoErr k e -> Ordering AnnoErr k e -> AnnoErr k e -> AnnoErr k e forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a forall k e. (Ord k, Ord e) => Eq (AnnoErr k e) forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> Bool forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> Ordering forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> AnnoErr k e $ccompare :: forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> Ordering compare :: AnnoErr k e -> AnnoErr k e -> Ordering $c< :: forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> Bool < :: AnnoErr k e -> AnnoErr k e -> Bool $c<= :: forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> Bool <= :: AnnoErr k e -> AnnoErr k e -> Bool $c> :: forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> Bool > :: AnnoErr k e -> AnnoErr k e -> Bool $c>= :: forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> Bool >= :: AnnoErr k e -> AnnoErr k e -> Bool $cmax :: forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> AnnoErr k e max :: AnnoErr k e -> AnnoErr k e -> AnnoErr k e $cmin :: forall k e. (Ord k, Ord e) => AnnoErr k e -> AnnoErr k e -> AnnoErr k e min :: AnnoErr k e -> AnnoErr k e -> AnnoErr k e Ord, Int -> AnnoErr k e -> ShowS [AnnoErr k e] -> ShowS AnnoErr k e -> String (Int -> AnnoErr k e -> ShowS) -> (AnnoErr k e -> String) -> ([AnnoErr k e] -> ShowS) -> Show (AnnoErr k e) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall k e. (Show k, Show e) => Int -> AnnoErr k e -> ShowS forall k e. (Show k, Show e) => [AnnoErr k e] -> ShowS forall k e. (Show k, Show e) => AnnoErr k e -> String $cshowsPrec :: forall k e. (Show k, Show e) => Int -> AnnoErr k e -> ShowS showsPrec :: Int -> AnnoErr k e -> ShowS $cshow :: forall k e. (Show k, Show e) => AnnoErr k e -> String show :: AnnoErr k e -> String $cshowList :: forall k e. (Show k, Show e) => [AnnoErr k e] -> ShowS showList :: [AnnoErr k e] -> ShowS Show) instance (Show k, Typeable k, Show e, Typeable e) => Exception (AnnoErr k e) unwrapAnnoErr :: Either (AnnoErr k Void) a -> a unwrapAnnoErr :: forall k a. Either (AnnoErr k Void) a -> a unwrapAnnoErr = (AnnoErr k Void -> a) -> (a -> a) -> Either (AnnoErr k Void) a -> a forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (Void -> a forall a. Void -> a absurd (Void -> a) -> (AnnoErr k Void -> Void) -> AnnoErr k Void -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . AnnoErr k Void -> Void forall k e. AnnoErr k e -> e annoErrVal) a -> a forall a. a -> a id newtype RwT k e m a = RwT {forall k e (m :: * -> *) a. RwT k e m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a unRwT :: ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a} deriving newtype ((forall a b. (a -> b) -> RwT k e m a -> RwT k e m b) -> (forall a b. a -> RwT k e m b -> RwT k e m a) -> Functor (RwT k e m) forall a b. a -> RwT k e m b -> RwT k e m a forall a b. (a -> b) -> RwT k e m a -> RwT k e m b forall k e (m :: * -> *) a b. Functor m => a -> RwT k e m b -> RwT k e m a forall k e (m :: * -> *) a b. Functor m => (a -> b) -> RwT k e m a -> RwT k e m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f $cfmap :: forall k e (m :: * -> *) a b. Functor m => (a -> b) -> RwT k e m a -> RwT k e m b fmap :: forall a b. (a -> b) -> RwT k e m a -> RwT k e m b $c<$ :: forall k e (m :: * -> *) a b. Functor m => a -> RwT k e m b -> RwT k e m a <$ :: forall a b. a -> RwT k e m b -> RwT k e m a Functor, Functor (RwT k e m) Functor (RwT k e m) => (forall a. a -> RwT k e m a) -> (forall a b. RwT k e m (a -> b) -> RwT k e m a -> RwT k e m b) -> (forall a b c. (a -> b -> c) -> RwT k e m a -> RwT k e m b -> RwT k e m c) -> (forall a b. RwT k e m a -> RwT k e m b -> RwT k e m b) -> (forall a b. RwT k e m a -> RwT k e m b -> RwT k e m a) -> Applicative (RwT k e m) forall a. a -> RwT k e m a forall a b. RwT k e m a -> RwT k e m b -> RwT k e m a forall a b. RwT k e m a -> RwT k e m b -> RwT k e m b forall a b. RwT k e m (a -> b) -> RwT k e m a -> RwT k e m b forall a b c. (a -> b -> c) -> RwT k e m a -> RwT k e m b -> RwT k e m c forall k e (m :: * -> *). Monad m => Functor (RwT k e m) forall k e (m :: * -> *) a. Monad m => a -> RwT k e m a forall k e (m :: * -> *) a b. Monad m => RwT k e m a -> RwT k e m b -> RwT k e m a forall k e (m :: * -> *) a b. Monad m => RwT k e m a -> RwT k e m b -> RwT k e m b forall k e (m :: * -> *) a b. Monad m => RwT k e m (a -> b) -> RwT k e m a -> RwT k e m b forall k e (m :: * -> *) a b c. Monad m => (a -> b -> c) -> RwT k e m a -> RwT k e m b -> RwT k e m c forall (f :: * -> *). Functor f => (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f $cpure :: forall k e (m :: * -> *) a. Monad m => a -> RwT k e m a pure :: forall a. a -> RwT k e m a $c<*> :: forall k e (m :: * -> *) a b. Monad m => RwT k e m (a -> b) -> RwT k e m a -> RwT k e m b <*> :: forall a b. RwT k e m (a -> b) -> RwT k e m a -> RwT k e m b $cliftA2 :: forall k e (m :: * -> *) a b c. Monad m => (a -> b -> c) -> RwT k e m a -> RwT k e m b -> RwT k e m c liftA2 :: forall a b c. (a -> b -> c) -> RwT k e m a -> RwT k e m b -> RwT k e m c $c*> :: forall k e (m :: * -> *) a b. Monad m => RwT k e m a -> RwT k e m b -> RwT k e m b *> :: forall a b. RwT k e m a -> RwT k e m b -> RwT k e m b $c<* :: forall k e (m :: * -> *) a b. Monad m => RwT k e m a -> RwT k e m b -> RwT k e m a <* :: forall a b. RwT k e m a -> RwT k e m b -> RwT k e m a Applicative, Applicative (RwT k e m) Applicative (RwT k e m) => (forall a b. RwT k e m a -> (a -> RwT k e m b) -> RwT k e m b) -> (forall a b. RwT k e m a -> RwT k e m b -> RwT k e m b) -> (forall a. a -> RwT k e m a) -> Monad (RwT k e m) forall a. a -> RwT k e m a forall a b. RwT k e m a -> RwT k e m b -> RwT k e m b forall a b. RwT k e m a -> (a -> RwT k e m b) -> RwT k e m b forall k e (m :: * -> *). Monad m => Applicative (RwT k e m) forall k e (m :: * -> *) a. Monad m => a -> RwT k e m a forall k e (m :: * -> *) a b. Monad m => RwT k e m a -> RwT k e m b -> RwT k e m b forall k e (m :: * -> *) a b. Monad m => RwT k e m a -> (a -> RwT k e m b) -> RwT k e m b forall (m :: * -> *). Applicative m => (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m $c>>= :: forall k e (m :: * -> *) a b. Monad m => RwT k e m a -> (a -> RwT k e m b) -> RwT k e m b >>= :: forall a b. RwT k e m a -> (a -> RwT k e m b) -> RwT k e m b $c>> :: forall k e (m :: * -> *) a b. Monad m => RwT k e m a -> RwT k e m b -> RwT k e m b >> :: forall a b. RwT k e m a -> RwT k e m b -> RwT k e m b $creturn :: forall k e (m :: * -> *) a. Monad m => a -> RwT k e m a return :: forall a. a -> RwT k e m a Monad) type Rw k e = RwT k e Identity instance MonadTrans (RwT k e) where lift :: forall (m :: * -> *) a. Monad m => m a -> RwT k e m a lift = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT (ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a) -> (m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a) -> m a -> RwT k e m a forall b c a. (b -> c) -> (a -> b) -> a -> c . ExceptT (AnnoErr k e) m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall (m :: * -> *) a. Monad m => m a -> ReaderT (NESeq k) m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (ExceptT (AnnoErr k e) m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a) -> (m a -> ExceptT (AnnoErr k e) m a) -> m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall b c a. (b -> c) -> (a -> b) -> a -> c . m a -> ExceptT (AnnoErr k e) m a forall (m :: * -> *) a. Monad m => m a -> ExceptT (AnnoErr k e) m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift runRwT :: RwT k e m a -> k -> m (Either (AnnoErr k e) a) runRwT :: forall k e (m :: * -> *) a. RwT k e m a -> k -> m (Either (AnnoErr k e) a) runRwT RwT k e m a m = ExceptT (AnnoErr k e) m a -> m (Either (AnnoErr k e) a) forall e (m :: * -> *) a. ExceptT e m a -> m (Either e a) runExceptT (ExceptT (AnnoErr k e) m a -> m (Either (AnnoErr k e) a)) -> (k -> ExceptT (AnnoErr k e) m a) -> k -> m (Either (AnnoErr k e) a) forall b c a. (b -> c) -> (a -> b) -> a -> c . ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> NESeq k -> ExceptT (AnnoErr k e) m a forall r (m :: * -> *) a. ReaderT r m a -> r -> m a runReaderT (RwT k e m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall k e (m :: * -> *) a. RwT k e m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a unRwT RwT k e m a m) (NESeq k -> ExceptT (AnnoErr k e) m a) -> (k -> NESeq k) -> k -> ExceptT (AnnoErr k e) m a forall b c a. (b -> c) -> (a -> b) -> a -> c . k -> NESeq k forall a. a -> NESeq a NESeq.singleton runRw :: Rw k e a -> k -> Either (AnnoErr k e) a runRw :: forall k e a. Rw k e a -> k -> Either (AnnoErr k e) a runRw Rw k e a m = Identity (Either (AnnoErr k e) a) -> Either (AnnoErr k e) a forall a. Identity a -> a runIdentity (Identity (Either (AnnoErr k e) a) -> Either (AnnoErr k e) a) -> (k -> Identity (Either (AnnoErr k e) a)) -> k -> Either (AnnoErr k e) a forall b c a. (b -> c) -> (a -> b) -> a -> c . Rw k e a -> k -> Identity (Either (AnnoErr k e) a) forall k e (m :: * -> *) a. RwT k e m a -> k -> m (Either (AnnoErr k e) a) runRwT Rw k e a m embedRwT :: m (Either (AnnoErr k e) a) -> RwT k e m a embedRwT :: forall (m :: * -> *) k e a. m (Either (AnnoErr k e) a) -> RwT k e m a embedRwT m (Either (AnnoErr k e) a) n = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT ((NESeq k -> ExceptT (AnnoErr k e) m a) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a ReaderT (ExceptT (AnnoErr k e) m a -> NESeq k -> ExceptT (AnnoErr k e) m a forall a b. a -> b -> a const (m (Either (AnnoErr k e) a) -> ExceptT (AnnoErr k e) m a forall e (m :: * -> *) a. m (Either e a) -> ExceptT e m a ExceptT m (Either (AnnoErr k e) a) n))) pushRw :: (Monad m) => k -> RwT k e m a -> RwT k e m a pushRw :: forall (m :: * -> *) k e a. Monad m => k -> RwT k e m a -> RwT k e m a pushRw k b RwT k e m a m = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT ((NESeq k -> NESeq k) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall a. (NESeq k -> NESeq k) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a local (NESeq k -> k -> NESeq k forall a. NESeq a -> a -> NESeq a NESeq.|> k b) (RwT k e m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall k e (m :: * -> *) a. RwT k e m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a unRwT RwT k e m a m)) peekRw :: (Monad m) => RwT k e m k peekRw :: forall (m :: * -> *) k e. Monad m => RwT k e m k peekRw = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) k -> RwT k e m k forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT ((NESeq k -> k) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) k forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks NESeq k -> k forall a. NESeq a -> a NESeq.last) peeksRw :: (Monad m) => (k -> a) -> RwT k e m a peeksRw :: forall (m :: * -> *) k a e. Monad m => (k -> a) -> RwT k e m a peeksRw k -> a f = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT ((NESeq k -> a) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks (k -> a f (k -> a) -> (NESeq k -> k) -> NESeq k -> a forall b c a. (b -> c) -> (a -> b) -> a -> c . NESeq k -> k forall a. NESeq a -> a NESeq.last)) askRw :: (Monad m) => RwT k e m (NESeq k) askRw :: forall (m :: * -> *) k e. Monad m => RwT k e m (NESeq k) askRw = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) (NESeq k) -> RwT k e m (NESeq k) forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) (NESeq k) forall r (m :: * -> *). MonadReader r m => m r ask asksRw :: (Monad m) => (NESeq k -> a) -> RwT k e m a asksRw :: forall (m :: * -> *) k a e. Monad m => (NESeq k -> a) -> RwT k e m a asksRw NESeq k -> a f = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT ((NESeq k -> a) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks NESeq k -> a f) throwRw :: (Monad m) => e -> RwT k e m a throwRw :: forall (m :: * -> *) e k a. Monad m => e -> RwT k e m a throwRw e e = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT ((NESeq k -> k) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) k forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks NESeq k -> k forall a. NESeq a -> a NESeq.last ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) k -> (k -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall a b. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> (a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) b) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= \k b -> AnnoErr k e -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall a. AnnoErr k e -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall e (m :: * -> *) a. MonadError e m => e -> m a throwError (k -> e -> AnnoErr k e forall k e. k -> e -> AnnoErr k e AnnoErr k b e e)) instance (MonadReader r m) => MonadReader r (RwT k e m) where ask :: RwT k e m r ask = m r -> RwT k e m r forall (m :: * -> *) a. Monad m => m a -> RwT k e m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m r forall r (m :: * -> *). MonadReader r m => m r ask reader :: forall a. (r -> a) -> RwT k e m a reader r -> a f = m a -> RwT k e m a forall (m :: * -> *) a. Monad m => m a -> RwT k e m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((r -> a) -> m a forall a. (r -> a) -> m a forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a reader r -> a f) local :: forall a. (r -> r) -> RwT k e m a -> RwT k e m a local r -> r f RwT k e m a m = ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a forall k e (m :: * -> *) a. ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a RwT (ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> RwT k e m a forall a b. (a -> b) -> a -> b $ do NESeq k bs <- ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) (NESeq k) forall r (m :: * -> *). MonadReader r m => m r ask Either (AnnoErr k e) a ea <- ExceptT (AnnoErr k e) m (Either (AnnoErr k e) a) -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) (Either (AnnoErr k e) a) forall (m :: * -> *) a. Monad m => m a -> ReaderT (NESeq k) m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m (Either (AnnoErr k e) a) -> ExceptT (AnnoErr k e) m (Either (AnnoErr k e) a) forall (m :: * -> *) a. Monad m => m a -> ExceptT (AnnoErr k e) m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((r -> r) -> m (Either (AnnoErr k e) a) -> m (Either (AnnoErr k e) a) forall a. (r -> r) -> m a -> m a forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a local r -> r f (ExceptT (AnnoErr k e) m a -> m (Either (AnnoErr k e) a) forall e (m :: * -> *) a. ExceptT e m a -> m (Either e a) runExceptT (ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a -> NESeq k -> ExceptT (AnnoErr k e) m a forall r (m :: * -> *) a. ReaderT r m a -> r -> m a runReaderT (RwT k e m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall k e (m :: * -> *) a. RwT k e m a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a unRwT RwT k e m a m) NESeq k bs)))) (AnnoErr k e -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a) -> (a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a) -> Either (AnnoErr k e) a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either AnnoErr k e -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall a. AnnoErr k e -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall e (m :: * -> *) a. MonadError e m => e -> m a throwError a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall a. a -> ReaderT (NESeq k) (ExceptT (AnnoErr k e) m) a forall (f :: * -> *) a. Applicative f => a -> f a pure Either (AnnoErr k e) a ea instance (MonadState s m) => MonadState s (RwT k e m) where get :: RwT k e m s get = m s -> RwT k e m s forall (m :: * -> *) a. Monad m => m a -> RwT k e m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift m s forall s (m :: * -> *). MonadState s m => m s get put :: s -> RwT k e m () put = m () -> RwT k e m () forall (m :: * -> *) a. Monad m => m a -> RwT k e m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m () -> RwT k e m ()) -> (s -> m ()) -> s -> RwT k e m () forall b c a. (b -> c) -> (a -> b) -> a -> c . s -> m () forall s (m :: * -> *). MonadState s m => s -> m () put state :: forall a. (s -> (a, s)) -> RwT k e m a state s -> (a, s) f = m a -> RwT k e m a forall (m :: * -> *) a. Monad m => m a -> RwT k e m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift ((s -> (a, s)) -> m a forall a. (s -> (a, s)) -> m a forall s (m :: * -> *) a. MonadState s m => (s -> (a, s)) -> m a state s -> (a, s) f) instance (MonadIO m) => MonadIO (RwT k e m) where liftIO :: forall a. IO a -> RwT k e m a liftIO = m a -> RwT k e m a forall (m :: * -> *) a. Monad m => m a -> RwT k e m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> RwT k e m a) -> (IO a -> m a) -> IO a -> RwT k e m a forall b c a. (b -> c) -> (a -> b) -> a -> c . IO a -> m a forall a. IO a -> m a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO wrapRw :: g a (Jot g k a) -> Rw k e (Jot g k a) wrapRw :: forall (g :: * -> * -> *) a k e. g a (Jot g k a) -> Rw k e (Jot g k a) wrapRw = (k -> Jot g k a) -> RwT k e Identity (Jot g k a) forall (m :: * -> *) k a e. Monad m => (k -> a) -> RwT k e m a peeksRw ((k -> Jot g k a) -> RwT k e Identity (Jot g k a)) -> (g a (Jot g k a) -> k -> Jot g k a) -> g a (Jot g k a) -> RwT k e Identity (Jot g k a) forall b c a. (b -> c) -> (a -> b) -> a -> c . (k -> g a (Jot g k a) -> Jot g k a) -> g a (Jot g k a) -> k -> Jot g k a forall a b c. (a -> b -> c) -> b -> a -> c flip k -> g a (Jot g k a) -> Jot g k a forall k (g :: * -> * -> *) a. k -> g a (Jot g k a) -> Jot g k a JotP jotRw :: (Bitraversable g) => (g a z -> Rw k e z) -> Jot g k a -> Either (AnnoErr k e) z jotRw :: forall (g :: * -> * -> *) a z k e. Bitraversable g => (g a z -> Rw k e z) -> Jot g k a -> Either (AnnoErr k e) z jotRw g a z -> Rw k e z f = Identity (Either (AnnoErr k e) z) -> Either (AnnoErr k e) z forall a. Identity a -> a runIdentity (Identity (Either (AnnoErr k e) z) -> Either (AnnoErr k e) z) -> (Jot g k a -> Identity (Either (AnnoErr k e) z)) -> Jot g k a -> Either (AnnoErr k e) z forall b c a. (b -> c) -> (a -> b) -> a -> c . (g a (Rw k e z) -> Rw k e z) -> Jot g k a -> Identity (Either (AnnoErr k e) z) forall (m :: * -> *) (g :: * -> * -> *) a k e z. (Monad m, Bitraversable g) => (g a (RwT k e m z) -> RwT k e m z) -> Jot g k a -> m (Either (AnnoErr k e) z) jotRwT ((a -> RwT k e Identity a) -> (Rw k e z -> Rw k e z) -> g a (Rw k e z) -> RwT k e Identity (g a z) forall (f :: * -> *) a c b d. Applicative f => (a -> f c) -> (b -> f d) -> g a b -> f (g c d) forall (t :: * -> * -> *) (f :: * -> *) a c b d. (Bitraversable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f (t c d) bitraverse a -> RwT k e Identity a forall a. a -> RwT k e Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure Rw k e z -> Rw k e z forall a. a -> a id (g a (Rw k e z) -> RwT k e Identity (g a z)) -> (g a z -> Rw k e z) -> g a (Rw k e z) -> Rw k e z forall (m :: * -> *) a b c. Monad m => (a -> m b) -> (b -> m c) -> a -> m c >=> g a z -> Rw k e z f) jotRwT :: (Monad m, Bitraversable g) => (g a (RwT k e m z) -> RwT k e m z) -> Jot g k a -> m (Either (AnnoErr k e) z) jotRwT :: forall (m :: * -> *) (g :: * -> * -> *) a k e z. (Monad m, Bitraversable g) => (g a (RwT k e m z) -> RwT k e m z) -> Jot g k a -> m (Either (AnnoErr k e) z) jotRwT g a (RwT k e m z) -> RwT k e m z f j0 :: Jot g k a j0@(JotP k b0 g a (Jot g k a) _) = RwT k e m z -> k -> m (Either (AnnoErr k e) z) forall k e (m :: * -> *) a. RwT k e m a -> k -> m (Either (AnnoErr k e) a) runRwT (Jot g k a -> RwT k e m z go Jot g k a j0) k b0 where go :: Jot g k a -> RwT k e m z go (JotP k b g a (Jot g k a) g) = k -> RwT k e m z -> RwT k e m z forall (m :: * -> *) k e a. Monad m => k -> RwT k e m a -> RwT k e m a pushRw k b (g a (RwT k e m z) -> RwT k e m z f ((Jot g k a -> RwT k e m z) -> g a (Jot g k a) -> g a (RwT k e m z) forall a b. (a -> b) -> g a a -> g a b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Jot g k a -> RwT k e m z go g a (Jot g k a) g))