5 ms·
Always when I see haskell demonstrations eveyrthing looks like just interface declarations. You can do beautiful interfaces with eg. java also. But where is th
by kisstheblade 10y ago
Always when I see haskell demonstrations eveyrthing looks like just interface declarations.
You can do beautiful interfaces with eg. java also.
But where is the meat where anything actually happens? I rarely see that in these posts.
Yes I could look up the source but I don't have time to read through it randomly.
This looks just so nice and stuff just magically works?:
runWorkerLoop
:: (MonadBackingStore m, MonadLogger m, MonadIO m)
=> WorkerState
-> m WorkerState
And monads to boot! (are monads haskells equivalent of java factories? I kid, I kid :)
- Ruud-v-A 10y agoThe runWorkerLoop function logs a few lines and sends out an initial job request (by enqueueing an event in Redis). It then calls the nested function `go`, which dequeues one event of a TBQueue (a thread-safe bounded queue), matches on the event, and calls the right function to handle it. If the event was not a "stop" event, `go` calls itself to do the next iteration of the loop. `go` takes a WorkerState as argument, which is how it keeps track of which jobs are running, and whether there is an unanswered job request. In reality the signature is a bit uglier, I simplified it for the post because the point was about effects. In particular we also pass in the configuration, Redis connection details, and a callback to manipulate the TBQueue.