Skip to content

Commit f952e58

Browse files
committed
fixup! io-classes: Add MonadUnique to support Data.Unique
1 parent 83412f7 commit f952e58

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

io-classes/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### next release
44

55
* Added module `Control.Monad.Class.MonadUnique` generalising `Data.Unique`.
6+
* mtl: Added module `Control.Monad.Class.MonadUnique.Trans` providing monad transformer instances for `MonadUnique`.
67

78
### 1.8.0.1
89

io-classes/io-classes.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ library mtl
175175
, Control.Monad.Class.MonadTime.SI.Trans
176176
, Control.Monad.Class.MonadTimer.Trans
177177
, Control.Monad.Class.MonadTimer.SI.Trans
178+
, Control.Monad.Class.MonadUnique.Trans
178179
build-depends: base,
179180
array,
180181
mtl,
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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

Comments
 (0)