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