{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Control.Monad.Trans.Changeset.Orphan where
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Changeset
import Control.Monad.Accum (MonadAccum (..))
import Control.Monad.Select (MonadSelect (..))
import Data.Monoid.RightAction
instance (MonadAccum w m, RightAction w' s, Monoid w') => MonadAccum w (ChangesetT s w' m) where
accum :: forall a. (w -> (a, w)) -> ChangesetT s w' m a
accum = m a -> ChangesetT s w' m a
forall (m :: * -> *) a. Monad m => m a -> ChangesetT s w' m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m a -> ChangesetT s w' m a)
-> ((w -> (a, w)) -> m a) -> (w -> (a, w)) -> ChangesetT s w' m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (w -> (a, w)) -> m a
forall a. (w -> (a, w)) -> m a
forall w (m :: * -> *) a. MonadAccum w m => (w -> (a, w)) -> m a
accum
instance (MonadSelect r m, RightAction w s, Monoid w) => MonadSelect r (ChangesetT s w m) where
select :: forall a. ((a -> r) -> a) -> ChangesetT s w m a
select = m a -> ChangesetT s w m a
forall (m :: * -> *) a. Monad m => m a -> ChangesetT s w m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m a -> ChangesetT s w m a)
-> (((a -> r) -> a) -> m a)
-> ((a -> r) -> a)
-> ChangesetT s w m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((a -> r) -> a) -> m a
forall a. ((a -> r) -> a) -> m a
forall r (m :: * -> *) a. MonadSelect r m => ((a -> r) -> a) -> m a
select