|
| 1 | +{-# OPTIONS_GHC -Wno-orphans #-} |
| 2 | +{-# LANGUAGE TypeFamilies, DerivingVia, UndecidableInstances #-} |
| 3 | + |
| 4 | +module Control.Monad.Class.MonadUnique.Trans () where |
| 5 | + |
| 6 | +import Data.Kind (Type) |
| 7 | + |
| 8 | +import Control.Monad.Cont (ContT) |
| 9 | +import Control.Monad.Except (ExceptT) |
| 10 | +import Control.Monad.RWS.Lazy qualified as Lazy |
| 11 | +import Control.Monad.RWS.Strict qualified as Strict |
| 12 | +import Control.Monad.State.Lazy qualified as Lazy |
| 13 | +import Control.Monad.State.Strict qualified as Strict |
| 14 | +import Control.Monad.Trans (MonadTrans(..)) |
| 15 | +import Control.Monad.Writer.Lazy qualified as Lazy |
| 16 | +import Control.Monad.Writer.Strict qualified as Strict |
| 17 | + |
| 18 | +import Control.Monad.Class.MonadUnique |
| 19 | + |
| 20 | + |
| 21 | +type Trans |
| 22 | + :: ((Type -> Type) -> (Type -> Type)) |
| 23 | + -> (Type -> Type) -> (Type -> Type) |
| 24 | +newtype Trans t m a = Trans (t m a) |
| 25 | + deriving (Functor, Applicative, Monad, MonadTrans) |
| 26 | + |
| 27 | +instance (MonadTrans t, MonadUnique m) => MonadUnique (Trans t m) where |
| 28 | + type Unique (Trans t m) = Unique m |
| 29 | + newUnique = lift newUnique |
| 30 | + hashUnique = hashUnique @m |
| 31 | + |
| 32 | + |
| 33 | +deriving via Trans (ContT r) m |
| 34 | + instance MonadUnique m => MonadUnique (ContT r m) |
| 35 | + |
| 36 | +deriving via Trans (ExceptT e) m |
| 37 | + instance MonadUnique m => MonadUnique (ExceptT e m) |
| 38 | + |
| 39 | +deriving via Trans (Lazy.RWST r w s) m |
| 40 | + instance (MonadUnique m, Monoid w) => MonadUnique (Lazy.RWST r w s m) |
| 41 | + |
| 42 | +deriving via Trans (Strict.RWST r w s) m |
| 43 | + instance (MonadUnique m, Monoid w) => MonadUnique (Strict.RWST r w s m) |
| 44 | + |
| 45 | +deriving via Trans (Lazy.StateT s) m |
| 46 | + instance MonadUnique m => MonadUnique (Lazy.StateT s m) |
| 47 | + |
| 48 | +deriving via Trans (Strict.StateT s) m |
| 49 | + instance MonadUnique m => MonadUnique (Strict.StateT s m) |
| 50 | + |
| 51 | +deriving via Trans (Lazy.WriterT w) m |
| 52 | + instance (MonadUnique m, Monoid w) => MonadUnique (Lazy.WriterT w m) |
| 53 | + |
| 54 | +deriving via Trans (Strict.WriterT w) m |
| 55 | + instance (MonadUnique m, Monoid w) => MonadUnique (Strict.WriterT w m) |
| 56 | + |
0 commit comments