44-- | - whether listener is added to the front (i.e. `on`) or back (i.e. `prependListener`) of the array
55-- | - whether a listener is automatically removed after the first event (i.e. `once` or `prependOnceListener`).
66-- |
7- -- | This module provides functions for each of the 2 callback-adding functions
7+ -- | This module provides functions for each of the above 4 callback-adding functions
88-- | If `<fn>` is either `on`, `once`, `prependListener`, or `prependOnceListener`, then this module exposes
9- -- | 1. `<fn>` - no programmable way to remove the listener
10- -- | 2. `<fn>Subscribe` - returns a callback that removes the listener
11- -- |
12- -- | The documentation for the `on*` functions provide an example of how to handle events.
9+ -- | 1. `<fn>` - returns a callback that removes the listener
10+ -- | 2. `<fn>_` - no programmable way to remove the listener
1311-- |
1412-- | ## Defining events emitted by an `EventEmitter`
1513-- |
@@ -53,13 +51,13 @@ module Node.EventEmitter
5351 , newListenerHandle
5452 , removeListenerHandle
5553 , on
56- , onSubscribe
54+ , on_
5755 , once
58- , onceSubscribe
56+ , once_
5957 , prependListener
60- , prependListenerSubscribe
58+ , prependListener_
6159 , prependOnceListener
62- , prependOnceListenerSubscribe
60+ , prependOnceListener_
6361 ) where
6462
6563import Prelude
@@ -157,46 +155,158 @@ removeListenerHandle :: EventHandle EventEmitter (Either JsSymbol String -> Effe
157155removeListenerHandle = EventHandle " removeListener" $ \cb -> mkEffectFn1 \jsSymbol ->
158156 cb $ runFn3 symbolOrStr Left Right jsSymbol
159157
160- -- | Adds the callback to the end of the `listeners` array and provides no way to remove it in the future.
158+ -- | Adds the listener to the **end** of the `listeners` array.
159+ -- | Returns a callback that will remove the listener from the event emitter's `listeners` array.
160+ -- | If the listener removal callback isn't needed, use `on_`.
161+ -- |
161162-- | Intended usage:
162163-- | ```
163- -- | on errorHandle eventEmitter \error -> do
164+ -- | removeLoggerCallback <- eventEmitter # on errorHandle \error -> do
164165-- | log $ "Got error: " <> Exception.message error
166+ -- | log $ "This listener will now be removed."
167+ -- | -- sometime later...
168+ -- | removeLoggerCallback
165169-- | ```
166170on
167171 :: forall emitter psCb jsCb
168172 . EventHandle emitter psCb jsCb
173+ -> psCb
169174 -> emitter
175+ -> Effect (Effect Unit )
176+ on (EventHandle eventName toJsCb) psCb eventEmitter =
177+ runEffectFn4 subscribeSameFunction unsafeOn (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
178+
179+ -- | Adds the callback to the **end** of the `listeners` array and provides no way to remove the listener in the future.
180+ -- | If you need a callback to remove the listener in the future, use `on`.
181+ -- | Intended usage:
182+ -- | ```
183+ -- | eventEmitter # on_ errorHandle \error -> do
184+ -- | log $ "Got error: " <> Exception.message error
185+ -- | ```
186+ on_
187+ :: forall emitter psCb jsCb
188+ . EventHandle emitter psCb jsCb
170189 -> psCb
190+ -> emitter
171191 -> Effect Unit
172- on (EventHandle eventName toJsCb) eventEmitter psCb =
192+ on_ (EventHandle eventName toJsCb) psCb eventEmitter =
173193 runEffectFn3 unsafeOn (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
174194
195+ -- | Adds the listener to the **end** of the `listeners` array. The listener will be removed after it is invoked once.
196+ -- | Returns a callback that will remove the listener from the event emitter's listeners array.
197+ -- | If the listener removal callback isn't needed, use `once_`.
198+ -- |
199+ -- | Intended usage:
200+ -- | ```
201+ -- | removeLoggerCallback <- eventEmitter # once errorHandle \error -> do
202+ -- | log $ "Got error: " <> Exception.message error
203+ -- | log $ "This listener will now be removed."
204+ -- | -- sometime later...
205+ -- | removeLoggerCallback
206+ -- | ```
175207once
176208 :: forall emitter psCb jsCb
177209 . EventHandle emitter psCb jsCb
210+ -> psCb
178211 -> emitter
212+ -> Effect (Effect Unit )
213+ once (EventHandle eventName toJsCb) psCb eventEmitter =
214+ runEffectFn4 subscribeSameFunction unsafeOnce (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
215+
216+ -- | Adds the listener to the **end** of the `listeners` array. The listener will be removed after it is invoked once.
217+ -- | Returns a callback that will remove the listener from the event emitter's listeners array.
218+ -- | If you need a callback to remove the listener in the future, use `once`.
219+ -- |
220+ -- | Intended usage:
221+ -- | ```
222+ -- | eventEmitter # once_ errorHandle \error -> do
223+ -- | log $ "Got error: " <> Exception.message error
224+ -- | ```
225+ once_
226+ :: forall emitter psCb jsCb
227+ . EventHandle emitter psCb jsCb
179228 -> psCb
229+ -> emitter
180230 -> Effect Unit
181- once (EventHandle eventName toJsCb) eventEmitter psCb =
231+ once_ (EventHandle eventName toJsCb) psCb eventEmitter =
182232 runEffectFn3 unsafeOnce (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
183233
234+ -- | Adds the listener to the **start** of the `listeners` array.
235+ -- | Returns a callback that will remove the listener from the event emitter's listeners array.
236+ -- | If the listener removal callback isn't needed, use `prependListener_`.
237+ -- |
238+ -- | Intended usage:
239+ -- | ```
240+ -- | removeLoggerCallback <- eventEmitter # prependListener errorHandle \error -> do
241+ -- | log $ "Got error: " <> Exception.message error
242+ -- | log $ "This listener will now be removed."
243+ -- | -- sometime later...
244+ -- | removeLoggerCallback
245+ -- | ```
184246prependListener
185247 :: forall emitter psCb jsCb
186248 . EventHandle emitter psCb jsCb
249+ -> psCb
187250 -> emitter
251+ -> Effect (Effect Unit )
252+ prependListener (EventHandle eventName toJsCb) psCb eventEmitter =
253+ runEffectFn4 subscribeSameFunction unsafePrependListener (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
254+
255+ -- | Adds the listener to the **start** of the `listeners` array.
256+ -- | Returns a callback that will remove the listener from the event emitter's listeners array.
257+ -- | If the listener removal callback isn't needed, use `prependListener`.
258+ -- |
259+ -- | Intended usage:
260+ -- | ```
261+ -- | eventEmitter # prependListener_ errorHandle \error -> do
262+ -- | log $ "Got error: " <> Exception.message error
263+ -- | ```
264+ prependListener_
265+ :: forall emitter psCb jsCb
266+ . EventHandle emitter psCb jsCb
188267 -> psCb
268+ -> emitter
189269 -> Effect Unit
190- prependListener (EventHandle eventName toJsCb) eventEmitter psCb =
270+ prependListener_ (EventHandle eventName toJsCb) psCb eventEmitter =
191271 runEffectFn3 unsafePrependListener (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
192272
273+ -- | Adds the listener to the **start** of the `listeners` array. The listener will be removed after it is invoked once.
274+ -- | Returns a callback that will remove the listener from the event emitter's listeners array.
275+ -- | If the listener removal callback isn't needed, use `prependOnceListener_`.
276+ -- |
277+ -- | Intended usage:
278+ -- | ```
279+ -- | removeLoggerCallback <- eventEmitter # prependOnceListener errorHandle \error -> do
280+ -- | log $ "Got error: " <> Exception.message error
281+ -- | log $ "This listener will now be removed."
282+ -- | -- sometime later...
283+ -- | removeLoggerCallback
284+ -- | ```
193285prependOnceListener
194286 :: forall emitter psCb jsCb
195287 . EventHandle emitter psCb jsCb
288+ -> psCb
196289 -> emitter
290+ -> Effect (Effect Unit )
291+ prependOnceListener (EventHandle eventName toJsCb) psCb eventEmitter =
292+ runEffectFn4 subscribeSameFunction unsafePrependOnceListener (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
293+
294+ -- | Adds the listener to the **start** of the `listeners` array. The listener will be removed after it is invoked once.
295+ -- | Returns a callback that will remove the listener from the event emitter's listeners array.
296+ -- | If you need a callback to remove the listener in the future, use `prependOnceListener`.
297+ -- |
298+ -- | Intended usage:
299+ -- | ```
300+ -- | eventEmitter # prependOnceListener_ errorHandle \error -> do
301+ -- | log $ "Got error: " <> Exception.message error
302+ -- | ```
303+ prependOnceListener_
304+ :: forall emitter psCb jsCb
305+ . EventHandle emitter psCb jsCb
197306 -> psCb
307+ -> emitter
198308 -> Effect Unit
199- prependOnceListener (EventHandle eventName toJsCb) eventEmitter psCb =
309+ prependOnceListener_ (EventHandle eventName toJsCb) psCb eventEmitter =
200310 runEffectFn3 unsafePrependOnceListener (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
201311
202312-- | Internal function that ensures the JS callback function is the same one
@@ -214,50 +324,6 @@ subscribeSameFunction = mkEffectFn4 \onXFn eventEmitter eventName jsCb -> do
214324 runEffectFn3 onXFn (unsafeCoerce eventEmitter) eventName jsCb
215325 pure $ runEffectFn3 unsafeOff (unsafeCoerce eventEmitter) eventName jsCb
216326
217- -- | A variant of `on` that returns a callback that will remove the listener from the event emitter's listeners array.
218- -- | Intended usage:
219- -- | ```
220- -- | removeLoggerCallback <- onSubscribe errorHandle eventEmitter \error -> do
221- -- | log $ "Got error: " <> Exception.message error
222- -- | -- sometime later...
223- -- | removeLoggerCallback
224- -- | ```
225- onSubscribe
226- :: forall emitter psCb jsCb
227- . EventHandle emitter psCb jsCb
228- -> emitter
229- -> psCb
230- -> Effect (Effect Unit )
231- onSubscribe (EventHandle eventName toJsCb) eventEmitter psCb =
232- runEffectFn4 subscribeSameFunction unsafeOn (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
233-
234- onceSubscribe
235- :: forall emitter psCb jsCb
236- . EventHandle emitter psCb jsCb
237- -> emitter
238- -> psCb
239- -> Effect (Effect Unit )
240- onceSubscribe (EventHandle eventName toJsCb) eventEmitter psCb =
241- runEffectFn4 subscribeSameFunction unsafeOnce (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
242-
243- prependListenerSubscribe
244- :: forall emitter psCb jsCb
245- . EventHandle emitter psCb jsCb
246- -> emitter
247- -> psCb
248- -> Effect (Effect Unit )
249- prependListenerSubscribe (EventHandle eventName toJsCb) eventEmitter psCb =
250- runEffectFn4 subscribeSameFunction unsafePrependListener (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
251-
252- prependOnceListenerSubscribe
253- :: forall emitter psCb jsCb
254- . EventHandle emitter psCb jsCb
255- -> emitter
256- -> psCb
257- -> Effect (Effect Unit )
258- prependOnceListenerSubscribe (EventHandle eventName toJsCb) eventEmitter psCb =
259- runEffectFn4 subscribeSameFunction unsafePrependOnceListener (unsafeCoerce eventEmitter) eventName $ toJsCb psCb
260-
261327foreign import unsafeOn :: forall f . EffectFn3 EventEmitter String f Unit
262328foreign import unsafeOff :: forall f . EffectFn3 EventEmitter String f Unit
263329foreign import unsafeOnce :: forall f . EffectFn3 EventEmitter String f Unit
0 commit comments