File tree Expand file tree Collapse file tree 3 files changed +38
-0
lines changed Expand file tree Collapse file tree 3 files changed +38
-0
lines changed Original file line number Diff line number Diff line change 1
1
# Revsion history of io-classes
2
2
3
+ ### next release
4
+
5
+ * Added module ` Control.Monad.Class.MonadUnique ` generalising ` Data.Unique ` .
6
+
3
7
### 1.8.0.1
4
8
5
9
* Added support for ` ghc-9.2 ` .
Original file line number Diff line number Diff line change @@ -87,6 +87,7 @@ library
87
87
Control.Monad.Class.MonadTime
88
88
Control.Monad.Class.MonadTimer
89
89
Control.Monad.Class.MonadTest
90
+ Control.Monad.Class.MonadUnique
90
91
default-language : GHC2021
91
92
default-extensions : LambdaCase
92
93
build-depends : base >= 4.16 && < 4.22 ,
Original file line number Diff line number Diff line change
1
+ {-# LANGUAGE TypeFamilies, AllowAmbiguousTypes #-}
2
+
3
+ -- | A generalisation of the
4
+ -- <https://hackage.haskell.org/package/base/docs/Data-Unique.html Data.Unique>
5
+ -- API to both 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.
6
+ --
7
+ module Control.Monad.Class.MonadUnique (
8
+ MonadUnique (.. )
9
+ ) where
10
+
11
+ -- base
12
+ import Data.Kind (Type )
13
+ import Data.Unique qualified as IO
14
+
15
+ -- transformers
16
+ import Control.Monad.Reader (ReaderT (.. ), lift )
17
+
18
+
19
+ class (Monad m , Eq (Unique m ), Ord (Unique m )) => MonadUnique m where
20
+ type Unique m :: Type
21
+ newUnique :: m (Unique m )
22
+ hashUnique :: Unique m -> Int
23
+
24
+ instance MonadUnique IO where
25
+ type Unique IO = IO. Unique
26
+ newUnique = IO. newUnique
27
+ hashUnique = IO. hashUnique
28
+
29
+ instance MonadUnique m => MonadUnique (ReaderT r m ) where
30
+ type Unique (ReaderT r m ) = Unique m
31
+ newUnique = lift newUnique
32
+ hashUnique = hashUnique @ m
33
+
You can’t perform that action at this time.
0 commit comments