/
IOLike.hs
70 lines (63 loc) · 1.88 KB
/
IOLike.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE QuantifiedConstraints #-}
module Ouroboros.Consensus.Util.IOLike (
IOLike
-- * Re-exports
-- *** MonadThrow
, MonadThrow(..)
, MonadCatch(..)
, MonadMask(..)
, Exception(..)
, SomeException
, ExitCase(..)
-- *** MonadSTM
, module Ouroboros.Consensus.Util.MonadSTM.NormalForm
-- *** MonadFork
, MonadFork(..) -- TODO: Should we hide this in favour of MonadAsync?
, MonadThread(..)
-- *** MonadAsync
, MonadAsyncSTM(..)
, MonadAsync(..)
, ExceptionInLinkedThread(..)
, linkTo
-- *** MonadST
, MonadST(..)
-- *** MonadTime
, MonadTime(..)
, DiffTime
, Time(..)
, UTCTime
, addTime
, diffTime
-- *** MonadDelay
, MonadDelay(..)
-- *** Cardano prelude
, NoUnexpectedThunks(..)
) where
import Cardano.Prelude (NoUnexpectedThunks (..))
import Control.Monad.Class.MonadAsync
import Control.Monad.Class.MonadFork
import Control.Monad.Class.MonadST
import Control.Monad.Class.MonadThrow
import Control.Monad.Class.MonadTime
import Control.Monad.Class.MonadTimer
import Ouroboros.Consensus.Util.MonadSTM.NormalForm
import Ouroboros.Consensus.Util.Orphans ()
{-------------------------------------------------------------------------------
IOLike
-------------------------------------------------------------------------------}
class ( MonadAsync m
, MonadFork m
, MonadST m
, MonadTime m
, MonadDelay m
, MonadThread m
, MonadThrow m
, MonadCatch m
, MonadMask m
, MonadThrow (STM m)
, forall a. NoUnexpectedThunks (m a)
, forall a. NoUnexpectedThunks a => NoUnexpectedThunks (StrictTVar m a)
, forall a. NoUnexpectedThunks a => NoUnexpectedThunks (StrictMVar m a)
) => IOLike m where
instance IOLike IO