This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-12-29
Channels
- # aleph (1)
- # announcements (5)
- # beginners (21)
- # cider (4)
- # clojars (1)
- # clojure (39)
- # clojure-europe (5)
- # clojure-norway (133)
- # clojurescript (5)
- # datomic (27)
- # exercism (2)
- # gratitude (4)
- # humbleui (21)
- # hyperfiddle (10)
- # integrant (16)
- # introduce-yourself (1)
- # lsp (17)
- # matrix (1)
- # nbb (10)
- # overtone (5)
- # polylith (21)
- # re-frame (6)
- # squint (3)
- # tools-deps (22)
- # yamlscript (102)
btw, @alandipert, one disconnect I have with the scenarios described was that Matrix apps, as I code them, work exclusively by event handlers kicking off individual state changes, so the problem dosync
solves does not really register for me. The case I had where two related changes were made back-to-back actually turned into four related changes and then at five I broke down and admitted that the five properties should actually be their own "game" object. Then the "restart game" button just needed to change the current-game
property to a new game, in one mutation.
In a sense, MX exposed a design failure on my part. This reminds me of how
(let [a (f1)
. b (f2)]
(or a b))
...breaks the MX efficiency we get from (or (f1)(f2))
, punishing if you will let
abuse.
Hmm, that said, watch functions like to automate things for users by kicking off sequences of changes they would normally do. Here I have the deferral function mentioned last time, and these are free to finish with yet another deferred change. But as I said, we are just pretending to be a user; normal app code would not do that.