@@ -2,7 +2,10 @@ module Control.Monad.Aff.AVar
2
2
( module Control.Monad.Eff.AVar
3
3
, makeVar
4
4
, makeEmptyVar
5
+ , status
5
6
, isEmptyVar
7
+ , isFilledVar
8
+ , isKilledVar
6
9
, takeVar
7
10
, tryTakeVar
8
11
, putVar
@@ -15,7 +18,7 @@ module Control.Monad.Aff.AVar
15
18
import Prelude
16
19
import Control.Monad.Aff (Aff , Canceler (..), makeAff )
17
20
import Control.Monad.Eff (Eff )
18
- import Control.Monad.Eff.AVar (AVar , AVAR )
21
+ import Control.Monad.Eff.AVar (AVar , AVAR , AVarStatus (..), isEmpty , isFilled , isKilled )
19
22
import Control.Monad.Eff.AVar as AVar
20
23
import Control.Monad.Eff.Class (liftEff )
21
24
import Control.Monad.Eff.Exception (Error )
@@ -32,10 +35,22 @@ makeVar = liftEff <<< AVar.makeVar
32
35
makeEmptyVar ∷ ∀ eff a . Aff (avar ∷ AVAR | eff ) (AVar a )
33
36
makeEmptyVar = liftEff AVar .makeEmptyVar
34
37
35
- -- | Synchronously checks whether an AVar currently has a value.
38
+ -- | Synchronously checks the status of an AVar.
39
+ status ∷ ∀ eff a . AVar a → Aff (avar ∷ AVAR | eff ) (AVar.AVarStatus a )
40
+ status = liftEff <<< AVar .status
41
+
42
+ -- | Synchronously checks whether an AVar currently is empty.
36
43
isEmptyVar ∷ ∀ eff a . AVar a → Aff (avar ∷ AVAR | eff ) Boolean
37
44
isEmptyVar = liftEff <<< AVar .isEmptyVar
38
45
46
+ -- | Synchronously checks whether an AVar currently has a value.
47
+ isFilledVar ∷ ∀ eff a . AVar a → Aff (avar ∷ AVAR | eff ) Boolean
48
+ isFilledVar = liftEff <<< AVar .isFilledVar
49
+
50
+ -- | Synchronously checks whether an AVar has been killed.
51
+ isKilledVar ∷ ∀ eff a . AVar a → Aff (avar ∷ AVAR | eff ) Boolean
52
+ isKilledVar = liftEff <<< AVar .isKilledVar
53
+
39
54
-- | Takes the AVar value, leaving it empty. If the AVar is already empty,
40
55
-- | the callback will be queued until the AVar is filled. Multiple takes will
41
56
-- | resolve in order as the AVar fills.
@@ -52,15 +67,15 @@ tryTakeVar = liftEff <<< AVar.tryTakeVar
52
67
-- | Sets the value of the AVar. If the AVar is already filled, it will be
53
68
-- | queued until the value is emptied. Multiple puts will resolve in order as
54
69
-- | the AVar becomes available.
55
- putVar ∷ ∀ eff a . AVar a → a → Aff (avar ∷ AVAR | eff ) Unit
56
- putVar avar value = makeAff \k → do
57
- c ← AVar .putVar avar value k
70
+ putVar ∷ ∀ eff a . a → AVar a → Aff (avar ∷ AVAR | eff ) Unit
71
+ putVar value avar = makeAff \k → do
72
+ c ← AVar .putVar value avar k
58
73
pure (toCanceler c)
59
74
60
75
-- | Attempts to synchronously fill an AVar. If the AVar is already filled,
61
76
-- | this will do nothing. Returns true or false depending on if it succeeded.
62
- tryPutVar ∷ ∀ eff a . AVar a → a → Aff (avar ∷ AVAR | eff ) Boolean
63
- tryPutVar avar = liftEff <<< AVar .tryPutVar avar
77
+ tryPutVar ∷ ∀ eff a . a → AVar a → Aff (avar ∷ AVAR | eff ) Boolean
78
+ tryPutVar value = liftEff <<< AVar .tryPutVar value
64
79
65
80
-- | Reads the AVar value. Unlike `takeVar`, this will not leave the AVar empty.
66
81
-- | If the AVar is empty, this will queue until it is filled. Multiple reads
@@ -77,5 +92,5 @@ tryReadVar = liftEff <<< AVar.tryReadVar
77
92
78
93
-- | Kills the AVar with an exception. All pending and future actions will
79
94
-- | resolve immediately with the provided exception.
80
- killVar ∷ ∀ eff a . AVar a → Error → Aff (avar ∷ AVAR | eff ) Unit
81
- killVar avar = liftEff <<< AVar .killVar avar
95
+ killVar ∷ ∀ eff a . Error → AVar a → Aff (avar ∷ AVAR | eff ) Unit
96
+ killVar error = liftEff <<< AVar .killVar error
0 commit comments