Skip to content

Commit 20c9de5

Browse files
authored
Queue now deals with pure values, no execution (#3)
1 parent 70b863e commit 20c9de5

File tree

4 files changed

+14
-14
lines changed

4 files changed

+14
-14
lines changed

src/Wire/Event.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ create = do
4242
pure do
4343
Ref.write true unsubscribing
4444
Ref.modify_ (Array.deleteBy unsafeRefEq subscriber) subscribers
45-
pure { event, push: (queue.push <<< pure), cancel: queue.kill }
45+
pure { event, push: queue.push, cancel: queue.kill }
4646

4747
makeEvent :: forall a. (Subscriber a -> Effect Canceller) -> Event a
4848
makeEvent = Event
@@ -145,7 +145,7 @@ instance functorEvent :: Functor Event where
145145
map f (Event event) =
146146
Event \emit -> do
147147
queue <- Queue.create (emit <<< f)
148-
cancel <- event (queue.push <<< pure)
148+
cancel <- event queue.push
149149
pure do
150150
cancel
151151
queue.kill

src/Wire/Event/Queue.purs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,16 @@ import Prelude
44
import Control.Monad.Rec.Class (forever)
55
import Effect (Effect)
66
import Effect.AVar as AVar
7-
import Effect.Aff (Aff)
87
import Effect.Aff as Aff
98
import Effect.Aff.AVar as AffVar
109
import Effect.Class (liftEffect)
1110

12-
create :: forall a b. (a -> Effect b) -> Effect { push :: Aff a -> Effect Unit, kill :: Effect Unit }
11+
create :: forall a b. (a -> Effect b) -> Effect { push :: a -> Effect Unit, kill :: Effect Unit }
1312
create consumer = do
1413
queue <- AVar.empty
1514
fiber <-
1615
(Aff.launchAff <<< forever) do
17-
aff <- AffVar.take queue
18-
a <- aff
16+
a <- AffVar.take queue
1917
liftEffect do consumer a
2018
let
2119
killFiber = Aff.launchAff_ do Aff.killFiber (Aff.error "killing queue consumer") fiber

src/Wire/Event/Time.purs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ delay offset event = do
1616
ms = fromDuration offset
1717
Event.makeEvent \emit -> do
1818
queue <- Queue.create emit
19-
cancel <- Event.subscribe event \a -> queue.push do Aff.delay ms *> pure a
19+
cancel <-
20+
Event.subscribe event \a ->
21+
Aff.launchAff_ do
22+
Aff.delay ms
23+
liftEffect do queue.push a
2024
pure do
2125
cancel
2226
queue.kill

test/Main.purs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
module Test.Main where
22

33
import Prelude
4-
import Control.Alt ((<|>))
54
import Data.Array as Array
65
import Data.FoldableWithIndex (foldlWithIndex)
76
import Data.Int as Int
8-
import Data.List.Lazy (range)
97
import Data.String.CodeUnits as CodeUnits
108
import Effect (Effect)
119
import Effect.Class.Console as Console
@@ -14,13 +12,13 @@ import Wire.Event as Event
1412

1513
main :: Effect Unit
1614
main = do
17-
void $ Event.subscribe (Event.distinct (sumFromOneToOneHundred <|> sumFromOneToOneHundred) >>= pure <<< formatNumber <<< show) do Console.log
15+
void $ Event.subscribe ((\a b -> "Hi " <> show (a + b)) <$> Event.range 1 5 <*> (Event.range 6 10 >>= pure)) do Console.logShow
1816

19-
sumFromOneToOneHundred :: Event Number
20-
sumFromOneToOneHundred =
21-
range 1 100
22-
# Event.fromFoldable
17+
sumOfSquaresFromOneToOneThousand :: Event Number
18+
sumOfSquaresFromOneToOneThousand =
19+
Event.range 1 1_000
2320
# map Int.toNumber
21+
# map (\x -> x * x)
2422
# Event.fold (+) 0.0
2523

2624
formatNumber :: String -> String

0 commit comments

Comments
 (0)