git.iko.soy/rowtype-yoga/purescript-yoga-om-strom
on main help sign in
4 files changed+66−702
since splitsnapshots
unifiedsplit
README.md+1 spago.lock+10−619 spago.yaml+5−14 src/Yoga/Om/Strom.purs+50−69
README.md+1
@@ -441,3 +441,4 @@ This design enables:
441441## Credits
442442
443443Inspired by [ZIO ZStream](https://zio.dev/reference/stream/zstream) from the Scala ZIO ecosystem.
444+
spago.lock+10−619
@@ -6,7 +6,7 @@
66 "core": {
77 "dependencies": [
88 {
9− "aff": ">=7.1.0 <8.0.0"
9+ "aff": ">=8.0.0 <9.0.0"
1010 },
1111 {
1212 "arrays": ">=7.3.0 <8.0.0"
@@ -53,14 +53,11 @@
5353 {
5454 "prelude": ">=6.0.2 <7.0.0"
5555 },
56− {
57− "ref-lifted": ">=0.0.1 <1.0.0"
58− },
5956 {
6057 "refs": ">=6.0.0 <7.0.0"
6158 },
6259 {
63− "spec": ">=8.1.1 <9.0.0"
60+ "spec": ">=8.1.2 <9.0.0"
6461 },
6562 {
6663 "st": ">=6.2.0 <7.0.0"
@@ -78,7 +75,7 @@
7875 "variant": ">=8.0.0 <9.0.0"
7976 },
8077 {
81− "yoga-om": ">=1.3.0 <2.0.0"
78+ "yoga-om": ">=1.5.2 <2.0.0"
8279 }
8380 ]
8481 },
@@ -94,605 +91,7 @@
9491 }
9592 }
9693 },
97− "package_set": {
98− "address": {
99− "registry": "73.0.0"
100− },
101− "compiler": ">=0.15.15 <0.16.0",
102− "content": {
103− "abc-parser": "2.1.0",
104− "ace": "9.1.0",
105− "address-rfc2821": "0.1.1",
106− "aff": "8.0.0",
107− "aff-bus": "6.0.0",
108− "aff-coroutines": "9.0.0",
109− "aff-promise": "4.0.0",
110− "aff-retry": "2.0.0",
111− "affjax": "13.0.0",
112− "affjax-node": "1.0.0",
113− "affjax-web": "1.0.0",
114− "ansi": "7.0.0",
115− "apexcharts": "0.5.0",
116− "applicative-phases": "1.0.0",
117− "argonaut": "9.0.0",
118− "argonaut-aeson-generic": "0.4.1",
119− "argonaut-codecs": "9.1.0",
120− "argonaut-core": "7.0.0",
121− "argonaut-generic": "8.0.0",
122− "argonaut-traversals": "10.0.0",
123− "argparse-basic": "2.0.0",
124− "array-builder": "0.1.2",
125− "array-search": "0.6.0",
126− "arraybuffer": "13.2.0",
127− "arraybuffer-builder": "3.1.0",
128− "arraybuffer-types": "3.0.2",
129− "arrays": "7.3.0",
130− "arrays-extra": "0.6.1",
131− "arrays-zipper": "2.0.1",
132− "ask": "1.0.0",
133− "assert": "6.0.0",
134− "assert-multiple": "0.4.0",
135− "avar": "5.0.1",
136− "axon": "0.0.3",
137− "b64": "0.0.8",
138− "barbies": "1.0.1",
139− "barlow-lens": "0.9.0",
140− "benchlib": "0.0.4",
141− "bifunctors": "6.1.0",
142− "bigints": "7.0.1",
143− "blessed": "1.0.0",
144− "bolson": "0.3.9",
145− "bookhound": "0.1.7",
146− "bower-json": "3.0.0",
147− "call-by-name": "4.0.1",
148− "canvas": "6.0.0",
149− "canvas-action": "9.0.0",
150− "cartesian": "1.0.6",
151− "catenable-lists": "7.0.0",
152− "cbor-stream": "1.3.0",
153− "chameleon": "1.0.0",
154− "chameleon-halogen": "1.0.3",
155− "chameleon-react-basic": "1.1.0",
156− "chameleon-styled": "2.5.0",
157− "chameleon-transformers": "1.0.0",
158− "channel": "1.0.0",
159− "checked-exceptions": "3.1.1",
160− "choku": "1.0.2",
161− "classless": "0.1.1",
162− "classless-arbitrary": "0.1.1",
163− "classless-decode-json": "0.1.1",
164− "classless-encode-json": "0.1.3",
165− "classnames": "2.0.0",
166− "codec": "6.1.0",
167− "codec-argonaut": "10.0.0",
168− "codec-json": "2.0.0",
169− "colors": "7.0.1",
170− "concur-core": "0.5.0",
171− "concur-react": "0.5.0",
172− "concurrent-queues": "3.0.0",
173− "console": "6.1.0",
174− "const": "6.0.0",
175− "contravariant": "6.0.0",
176− "control": "6.0.0",
177− "convertable-options": "1.0.0",
178− "coroutines": "7.0.0",
179− "css": "6.0.0",
180− "css-class-name-extractor": "0.0.4",
181− "css-frameworks": "1.1.0",
182− "csv-stream": "2.3.0",
183− "data-mvc": "0.0.2",
184− "datetime": "6.1.0",
185− "datetime-parsing": "0.2.0",
186− "debounce": "0.1.0",
187− "debug": "6.0.2",
188− "decimals": "7.1.0",
189− "default-values": "1.0.1",
190− "deku": "0.9.23",
191− "deno": "0.0.5",
192− "dissect": "1.0.0",
193− "distributive": "6.0.0",
194− "dodo-printer": "2.2.3",
195− "dom-filereader": "7.0.0",
196− "dom-indexed": "13.0.0",
197− "dom-simple": "0.4.0",
198− "dotenv": "4.0.3",
199− "droplet": "0.6.0",
200− "dts": "1.0.0",
201− "dual-numbers": "1.0.3",
202− "dynamic-buffer": "3.0.1",
203− "echarts-simple": "0.0.1",
204− "effect": "4.0.0",
205− "either": "6.1.0",
206− "elmish": "0.13.0",
207− "elmish-enzyme": "0.1.1",
208− "elmish-hooks": "0.11.0",
209− "elmish-html": "0.10.0",
210− "elmish-testing-library": "0.3.2",
211− "elmish-time-machine": "0.4.2",
212− "email-validate": "7.0.0",
213− "encoding": "0.0.9",
214− "enums": "6.0.1",
215− "env-names": "0.4.0",
216− "environment": "2.0.0",
217− "error": "2.0.0",
218− "eta-conversion": "0.3.2",
219− "exceptions": "6.1.0",
220− "exists": "6.0.0",
221− "exitcodes": "4.0.0",
222− "expect-inferred": "3.0.0",
223− "express": "0.9.1",
224− "ezfetch": "1.1.1",
225− "fahrtwind": "2.0.0",
226− "fakerjs": "0.0.1",
227− "fallback": "0.1.0",
228− "fast-vect": "1.2.0",
229− "fetch": "4.1.0",
230− "fetch-argonaut": "1.0.1",
231− "fetch-core": "5.1.0",
232− "fetch-yoga-json": "1.1.0",
233− "ffi-simple": "0.5.1",
234− "fft": "0.3.0",
235− "fft-js": "0.1.0",
236− "filterable": "5.0.0",
237− "fix-functor": "0.1.0",
238− "fixed-points": "7.0.0",
239− "fixed-precision": "5.0.0",
240− "flame": "1.6.0",
241− "float32": "2.0.0",
242− "fmt": "0.2.1",
243− "foldable-traversable": "6.0.0",
244− "foldable-traversable-extra": "0.0.6",
245− "foreign": "7.0.0",
246− "foreign-object": "4.1.0",
247− "foreign-readwrite": "3.4.0",
248− "forgetmenot": "0.1.0",
249− "fork": "6.0.0",
250− "form-urlencoded": "7.0.0",
251− "formatters": "7.0.0",
252− "framer-motion": "2.0.1",
253− "free": "7.1.0",
254− "freeap": "7.0.0",
255− "freer-free": "0.0.1",
256− "freet": "7.0.0",
257− "functions": "6.0.0",
258− "functor1": "3.0.0",
259− "functors": "5.0.0",
260− "fuzzy": "0.4.0",
261− "gen": "4.0.0",
262− "generate-values": "1.0.1",
263− "generic-router": "0.0.1",
264− "geojson": "0.0.5",
265− "geometria": "2.2.0",
266− "gesso": "1.0.1",
267− "gojs": "0.1.1",
268− "golem-fetch": "0.1.0",
269− "grain": "3.0.0",
270− "grain-router": "3.0.0",
271− "grain-virtualized": "3.0.0",
272− "graphql-client": "10.1.1",
273− "graphs": "8.1.0",
274− "group": "4.1.1",
275− "halogen": "7.0.0",
276− "halogen-bootstrap5": "5.3.2",
277− "halogen-canvas": "1.0.0",
278− "halogen-css": "10.0.0",
279− "halogen-declarative-canvas": "0.0.8",
280− "halogen-echarts-simple": "0.0.4",
281− "halogen-formless": "4.0.3",
282− "halogen-helix": "1.1.0",
283− "halogen-hooks": "0.6.3",
284− "halogen-hooks-extra": "0.9.0",
285− "halogen-infinite-scroll": "1.1.0",
286− "halogen-store": "0.5.4",
287− "halogen-storybook": "2.0.0",
288− "halogen-subscriptions": "2.0.0",
289− "halogen-svg-elems": "8.0.0",
290− "halogen-typewriter": "1.0.4",
291− "halogen-use-trigger-hooks": "1.0.0",
292− "halogen-vdom": "8.0.0",
293− "halogen-vdom-string-renderer": "0.5.0",
294− "halogen-xterm": "2.0.0",
295− "heckin": "2.0.1",
296− "heterogeneous": "0.7.0",
297− "homogeneous": "0.4.0",
298− "http-methods": "6.0.0",
299− "httpurple": "4.0.0",
300− "huffman": "0.4.0",
301− "humdrum": "0.0.1",
302− "hylograph-canvas": "0.1.0",
303− "hylograph-d3-kernel": "0.1.0",
304− "hylograph-graph": "0.1.0",
305− "hylograph-layout": "0.1.0",
306− "hylograph-music": "0.1.0",
307− "hylograph-optics": "0.1.0",
308− "hylograph-selection": "0.1.1",
309− "hylograph-simulation": "0.1.0",
310− "hylograph-simulation-core": "0.1.0",
311− "hylograph-simulation-halogen": "0.1.0",
312− "hylograph-transitions": "0.1.0",
313− "hylograph-wasm-kernel": "0.1.0",
314− "hyrule": "2.3.8",
315− "identity": "6.0.0",
316− "identy": "4.0.1",
317− "indexed-db": "1.0.0",
318− "indexed-monad": "3.0.0",
319− "ink": "0.0.1",
320− "int64": "3.0.0",
321− "integers": "6.0.0",
322− "interpolate": "5.0.2",
323− "intersection-observer": "1.0.1",
324− "invariant": "6.0.0",
325− "jarilo": "1.0.1",
326− "jelly": "0.10.0",
327− "jelly-router": "0.3.0",
328− "jelly-signal": "0.4.0",
329− "jest": "1.0.0",
330− "js-abort-controller": "1.0.0",
331− "js-bigints": "2.2.1",
332− "js-date": "8.0.0",
333− "js-fetch": "0.2.1",
334− "js-fileio": "3.0.0",
335− "js-intl": "1.1.4",
336− "js-iterators": "0.1.1",
337− "js-maps": "0.1.2",
338− "js-promise": "1.0.0",
339− "js-promise-aff": "1.0.0",
340− "js-timers": "6.1.0",
341− "js-uri": "3.1.0",
342− "jsdom": "1.0.0",
343− "json": "1.1.0",
344− "json-codecs": "5.0.0",
345− "justifill": "0.5.0",
346− "jwt": "0.0.9",
347− "labeled-data": "0.2.0",
348− "language-cst-parser": "0.14.1",
349− "lazy": "6.0.0",
350− "lazy-joe": "1.0.0",
351− "lcg": "4.0.0",
352− "leibniz": "5.0.0",
353− "leveldb": "1.0.1",
354− "liminal": "1.0.1",
355− "linalg": "6.0.0",
356− "lists": "7.0.0",
357− "literals": "1.0.2",
358− "logging": "3.0.0",
359− "logging-journald": "0.4.0",
360− "lumi-components": "18.0.0",
361− "machines": "7.0.0",
362− "maps-eager": "0.5.0",
363− "marionette": "1.0.0",
364− "marionette-react-basic-hooks": "0.1.1",
365− "marked": "0.1.0",
366− "matrices": "5.0.1",
367− "matryoshka": "1.0.0",
368− "maybe": "6.0.0",
369− "media-types": "6.0.0",
370− "meowclient": "1.0.0",
371− "midi": "4.0.0",
372− "milkis": "9.0.0",
373− "mimetype": "0.0.1",
374− "minibench": "4.0.1",
375− "mmorph": "7.0.0",
376− "monad-control": "5.0.0",
377− "monad-logger": "1.3.1",
378− "monad-loops": "0.5.0",
379− "monad-unlift": "1.0.1",
380− "monoid-extras": "0.0.1",
381− "monoidal": "0.16.0",
382− "morello": "0.4.0",
383− "mote": "3.0.0",
384− "motsunabe": "2.0.0",
385− "mvc": "0.0.1",
386− "mysql": "6.0.1",
387− "n3": "0.1.0",
388− "nano-id": "1.1.0",
389− "nanoid": "0.1.0",
390− "naturals": "3.0.0",
391− "nested-functor": "0.2.1",
392− "newtype": "5.0.0",
393− "nextjs": "0.1.1",
394− "nextui": "0.2.0",
395− "node-buffer": "9.0.0",
396− "node-child-process": "11.1.0",
397− "node-event-emitter": "3.0.0",
398− "node-execa": "5.0.0",
399− "node-fs": "9.2.0",
400− "node-glob-basic": "2.0.0",
401− "node-http": "9.1.0",
402− "node-http2": "1.1.1",
403− "node-human-signals": "1.0.0",
404− "node-net": "5.1.0",
405− "node-os": "5.1.0",
406− "node-path": "5.0.1",
407− "node-process": "11.2.0",
408− "node-readline": "8.1.1",
409− "node-sqlite3": "8.0.0",
410− "node-stream-pipes": "2.1.6",
411− "node-streams": "9.0.1",
412− "node-tls": "0.3.1",
413− "node-url": "7.0.1",
414− "node-workerbees": "0.3.1",
415− "node-zlib": "0.4.0",
416− "nonempty": "7.0.0",
417− "now": "6.0.0",
418− "npm-package-json": "2.0.0",
419− "nullable": "6.0.0",
420− "numberfield": "0.2.2",
421− "numbers": "9.0.1",
422− "oak": "3.1.1",
423− "oak-debug": "1.2.2",
424− "object-maps": "0.3.0",
425− "ocarina": "1.5.4",
426− "oooooooooorrrrrrrmm-lib": "0.0.1",
427− "open-colors-scales-and-schemes": "1.0.0",
428− "open-drawing": "6.0.4",
429− "open-folds": "6.4.0",
430− "open-foreign-generic": "11.0.3",
431− "open-memoize": "6.2.0",
432− "open-mkdirp-aff": "1.2.0",
433− "open-pairing": "6.2.0",
434− "open-smolder": "12.0.2",
435− "options": "7.0.0",
436− "optparse": "5.0.1",
437− "ordered-collections": "3.2.0",
438− "ordered-set": "0.4.0",
439− "orders": "6.0.0",
440− "org-doc": "0.1.0",
441− "owoify": "1.2.0",
442− "pairs": "9.0.1",
443− "parallel": "7.0.0",
444− "parsing": "11.0.0",
445− "parsing-dataview": "3.2.4",
446− "partial": "4.0.0",
447− "pathy": "9.0.0",
448− "pha": "0.13.0",
449− "phaser": "0.7.0",
450− "phylio": "1.1.2",
451− "pipes": "8.0.0",
452− "pirates-charm": "0.0.1",
453− "play": "1.0.0",
454− "pmock": "0.9.0",
455− "point-free": "1.0.0",
456− "pointed-list": "0.5.1",
457− "polymorphic-vectors": "4.0.0",
458− "posix-types": "6.0.0",
459− "postgresql": "2.0.21",
460− "precise": "6.0.0",
461− "precise-datetime": "7.0.0",
462− "prelude": "6.0.2",
463− "prettier-printer": "3.0.0",
464− "printf": "0.1.0",
465− "priority-queue": "0.1.2",
466− "profunctor": "6.0.1",
467− "profunctor-lenses": "8.0.0",
468− "protobuf": "4.4.0",
469− "psa-utils": "8.0.0",
470− "psci-support": "6.0.0",
471− "punycode": "1.0.0",
472− "pursfmt": "0.17.0",
473− "qualified-do": "2.2.0",
474− "quantities": "12.2.0",
475− "quickcheck": "8.0.1",
476− "quickcheck-combinators": "0.1.3",
477− "quickcheck-laws": "7.0.0",
478− "quickcheck-utf8": "0.0.0",
479− "random": "6.0.0",
480− "rationals": "6.0.0",
481− "rdf": "0.1.0",
482− "react": "11.0.0",
483− "react-aria": "0.2.0",
484− "react-basic": "17.0.0",
485− "react-basic-classic": "3.0.0",
486− "react-basic-dnd": "10.1.0",
487− "react-basic-dom": "7.0.0",
488− "react-basic-dom-beta": "0.1.1",
489− "react-basic-emotion": "7.1.0",
490− "react-basic-hooks": "9.0.0",
491− "react-basic-storybook": "2.0.0",
492− "react-dom": "8.0.0",
493− "react-halo": "3.0.0",
494− "react-icons": "1.1.5",
495− "react-markdown": "0.1.0",
496− "react-testing-library": "4.0.1",
497− "react-virtuoso": "1.0.0",
498− "reactix": "0.6.1",
499− "read": "1.0.1",
500− "recharts": "1.1.0",
501− "record": "4.0.0",
502− "record-extra": "5.0.1",
503− "record-extra-srghma": "0.2.8",
504− "record-ptional-fields": "0.1.2",
505− "record-studio": "1.0.4",
506− "refs": "6.0.0",
507− "remotedata": "5.0.1",
508− "repr": "0.5.0",
509− "resize-arrays": "0.0.1",
510− "resize-observer": "1.0.0",
511− "resource": "2.0.1",
512− "resourcet": "1.0.0",
513− "result": "1.0.3",
514− "return": "0.2.0",
515− "ring-modules": "5.0.1",
516− "rito": "0.3.4",
517− "roman": "0.4.0",
518− "rough-notation": "1.0.2",
519− "routing": "11.0.0",
520− "routing-duplex": "0.7.0",
521− "run": "5.0.0",
522− "safe-coerce": "2.0.0",
523− "safely": "4.0.1",
524− "school-of-music": "1.3.0",
525− "selection-foldable": "0.2.0",
526− "selective-functors": "1.0.1",
527− "semirings": "7.0.0",
528− "shuffle": "2.0.0",
529− "signal": "13.0.0",
530− "simple-emitter": "3.0.1",
531− "simple-i18n": "2.0.1",
532− "simple-json": "9.0.0",
533− "simple-json-generics": "0.2.1",
534− "simple-ulid": "3.0.0",
535− "sized-matrices": "1.0.0",
536− "sized-vectors": "5.0.2",
537− "slug": "3.2.0",
538− "small-ffi": "4.0.1",
539− "soundfonts": "4.1.0",
540− "sparse-matrices": "2.0.1",
541− "sparse-polynomials": "3.0.1",
542− "spec": "8.1.1",
543− "spec-discovery": "8.4.0",
544− "spec-mocha": "5.1.1",
545− "spec-node": "0.0.3",
546− "spec-quickcheck": "5.0.2",
547− "spec-reporter-xunit": "0.7.1",
548− "splitmix": "2.1.0",
549− "ssrs": "1.0.0",
550− "st": "6.2.0",
551− "statistics": "0.3.2",
552− "strictlypositiveint": "1.0.1",
553− "string-parsers": "8.0.0",
554− "strings": "6.0.1",
555− "strings-extra": "4.0.0",
556− "stringutils": "0.0.12",
557− "structured-logging": "1.0.0",
558− "substitute": "0.2.3",
559− "supply": "0.2.0",
560− "svg-parser": "3.0.0",
561− "systemd-journald": "0.3.0",
562− "tagged": "4.0.2",
563− "tailrec": "6.1.0",
564− "tanstack-query": "2.0.0",
565− "tecton": "0.2.1",
566− "tecton-halogen": "0.2.0",
567− "test-unit": "17.0.0",
568− "text-formatting": "0.1.0",
569− "thermite": "6.3.1",
570− "thermite-dom": "0.3.1",
571− "these": "6.0.0",
572− "threading": "0.0.3",
573− "tidy": "0.11.1",
574− "tidy-codegen": "4.0.1",
575− "tldr": "0.0.0",
576− "toestand": "0.9.0",
577− "transformation-matrix": "1.0.1",
578− "transformers": "6.1.0",
579− "transit": "1.0.0",
580− "tree-rose": "4.0.2",
581− "trivial-unfold": "0.5.0",
582− "ts-bridge": "4.0.0",
583− "tuples": "7.0.0",
584− "two-or-more": "1.0.0",
585− "type-equality": "4.0.1",
586− "typedenv": "2.0.1",
587− "typelevel": "6.0.0",
588− "typelevel-lists": "2.1.0",
589− "typelevel-peano": "1.0.1",
590− "typelevel-prelude": "7.0.0",
591− "typelevel-regex": "0.0.3",
592− "typelevel-rows": "0.1.0",
593− "typisch": "0.4.0",
594− "uint": "7.0.0",
595− "ulid": "3.0.1",
596− "uncurried-transformers": "1.1.0",
597− "undefined": "2.0.0",
598− "undefined-is-not-a-problem": "1.1.0",
599− "unfoldable": "6.0.0",
600− "unicode": "6.0.0",
601− "unique": "0.6.1",
602− "unlift": "1.0.1",
603− "unordered-collections": "3.1.0",
604− "unsafe-coerce": "6.0.0",
605− "unsafe-reference": "5.0.0",
606− "untagged-to-tagged": "0.1.4",
607− "untagged-union": "1.0.0",
608− "uri": "9.0.0",
609− "url-immutable": "1.0.0",
610− "url-regex-safe": "0.1.1",
611− "uuid": "9.0.0",
612− "uuidv4": "1.0.0",
613− "validation": "6.0.0",
614− "variant": "8.0.0",
615− "variant-encodings": "2.0.0",
616− "variant-gen": "1.0.0",
617− "vectorfield": "1.0.1",
618− "vectors": "2.1.0",
619− "versions": "7.0.0",
620− "visx": "0.0.2",
621− "vitest": "2.0.0",
622− "web-clipboard": "6.0.0",
623− "web-cssom": "2.0.0",
624− "web-cssom-view": "0.1.0",
625− "web-dom": "6.0.0",
626− "web-dom-parser": "8.0.0",
627− "web-dom-xpath": "3.0.0",
628− "web-encoding": "3.0.0",
629− "web-events": "4.0.0",
630− "web-fetch": "4.0.1",
631− "web-file": "4.0.0",
632− "web-geometry": "0.1.0",
633− "web-html": "4.1.1",
634− "web-pointerevents": "2.0.0",
635− "web-proletarian": "1.0.0",
636− "web-promise": "3.2.0",
637− "web-resize-observer": "2.1.0",
638− "web-router": "1.0.0",
639− "web-socket": "4.0.0",
640− "web-storage": "5.0.0",
641− "web-streams": "4.0.0",
642− "web-touchevents": "4.0.0",
643− "web-uievents": "5.0.0",
644− "web-url": "2.0.0",
645− "web-workers": "1.1.0",
646− "web-xhr": "5.0.1",
647− "webb-aff-list": "0.0.2",
648− "webb-array": "0.0.2",
649− "webb-channel": "0.0.3",
650− "webb-commandline": "0.0.3",
651− "webb-directory": "0.0.7",
652− "webb-file": "0.0.1",
653− "webb-map": "0.0.1",
654− "webb-monad": "0.0.2",
655− "webb-mutex": "0.0.7",
656− "webb-parsing": "0.0.5",
657− "webb-random": "0.0.1",
658− "webb-refer": "0.0.3",
659− "webb-set": "0.0.1",
660− "webb-slot": "0.0.1",
661− "webb-stateful": "0.0.3",
662− "webb-string": "0.0.1",
663− "webb-test": "0.0.1",
664− "webb-thread": "0.0.2",
665− "webb-writer": "0.0.3",
666− "webextension-polyfill": "0.1.0",
667− "webgpu": "0.0.1",
668− "which": "2.0.0",
669− "whine-core": "0.0.33",
670− "xterm": "1.0.0",
671− "yaml-next": "3.1.1",
672− "yoga-fetch": "1.0.1",
673− "yoga-json": "5.1.0",
674− "yoga-om": "0.1.0",
675− "yoga-postgres": "6.0.0",
676− "yoga-react-dom": "1.0.1",
677− "yoga-redis": "0.1.0",
678− "yoga-sql-types": "0.1.0",
679− "yoga-subtlecrypto": "0.1.0",
680− "yoga-test-docker": "0.1.0",
681− "yoga-tree": "1.0.0",
682− "yoga-tree-svg": "0.1.0",
683− "yoga-tree-utils": "1.0.0",
684− "z3": "0.0.2",
685− "zipperarray": "2.0.0"
686− }
687− },
688− "extra_packages": {
689− "ref-lifted": {
690− "path": "../purescript-ref-lifted"
691− },
692− "yoga-om": {
693− "path": "../purescript-yoga-om"
694− }
695− }
94+ "extra_packages": {}
69695 },
69796 "packages": {
69897 "aff": {
@@ -1583,15 +982,6 @@
1583982 "unsafe-coerce"
1584983 ]
1585984 },
1586− "ref-lifted": {
1587− "type": "local",
1588− "path": "../purescript-ref-lifted",
1589− "dependencies": [
1590− "effect",
1591− "prelude",
1592− "refs"
1593− ]
1594− },
1595985 "refs": {
1596986 "type": "registry",
1597987 "version": "6.0.0",
@@ -1611,8 +1001,8 @@
16111001 },
16121002 "spec": {
16131003 "type": "registry",
1614− "version": "8.1.1",
1615− "integrity": "sha256-b6qjDb7lUJGLV+WEoywLu6BCXC4zGpfbN43mTL+vBeI=",
1004+ "version": "8.1.2",
1005+ "integrity": "sha256-klPPJ6lBQI1CGOAdLJ+ZoGRt8XZippkTKjn53BrSkL0=",
16161006 "dependencies": [
16171007 "aff",
16181008 "ansi",
@@ -1824,8 +1214,9 @@
18241214 ]
18251215 },
18261216 "yoga-om": {
1827− "type": "local",
1828− "path": "../purescript-yoga-om",
1217+ "type": "registry",
1218+ "version": "1.5.2",
1219+ "integrity": "sha256-2ys14BF6NPgzFDFUIFk0EDxmqkA8+yghIA9TXHlOmE0=",
18291220 "dependencies": [
18301221 "aff",
18311222 "aff-retry",
@@ -1837,13 +1228,13 @@
18371228 "either",
18381229 "exceptions",
18391230 "functions",
1231+ "heterogeneous",
18401232 "maybe",
18411233 "newtype",
18421234 "parallel",
18431235 "prelude",
18441236 "record",
18451237 "record-studio",
1846− "ref-lifted",
18471238 "refs",
18481239 "tailrec",
18491240 "transformers",
spago.yaml+5−14
@@ -1,16 +1,8 @@
1−workspace:
2− packageSet:
3− registry: 73.0.0
4− extraPackages:
5− ref-lifted:
6− path: ../purescript-ref-lifted
7− yoga-om:
8− path: ../purescript-yoga-om
9−
1+workspace: {}
102package:
113 name: yoga-om-strom
124 publish:
13− version: 0.4.0
5+ version: 0.4.3
146 license: MIT-0
157 exclude:
168 - "src/**/*.test.purs"
@@ -19,7 +11,7 @@ package:
1911 githubOwner: rowtype-yoga
2012 githubRepo: purescript-yoga-om-strom
2113 dependencies:
22− - aff: ">=7.1.0 <8.0.0"
14+ - aff: ">=8.0.0 <9.0.0"
2315 - arrays: ">=7.3.0 <8.0.0"
2416 - avar: ">=5.0.1 <6.0.0"
2517 - catenable-lists: ">=7.0.0 <8.0.0"
@@ -35,15 +27,14 @@ package:
3527 - maybe: ">=6.0.0 <7.0.0"
3628 - now: ">=6.0.0 <7.0.0"
3729 - prelude: ">=6.0.2 <7.0.0"
38− - ref-lifted: ">=0.0.1 <1.0.0"
3930 - refs: ">=6.0.0 <7.0.0"
40− - spec: ">=8.1.1 <9.0.0"
31+ - spec: ">=8.1.2 <9.0.0"
4132 - st: ">=6.2.0 <7.0.0"
4233 - tailrec: ">=6.1.0 <7.0.0"
4334 - transformers: ">=6.1.0 <7.0.0"
4435 - tuples: ">=7.0.0 <8.0.0"
4536 - variant: ">=8.0.0 <9.0.0"
46− - yoga-om: ">=1.3.0 <2.0.0"
37+ - yoga-om: ">=1.5.2 <2.0.0"
4738 test:
4839 main: Test.Main.Strom
4940 dependencies:
src/Yoga/Om/Strom.purs+50−69
@@ -65,6 +65,7 @@ module Yoga.Om.Strom
6565 , partitionMap
6666 -- Timing
6767 , debounce
68+ , debounceEach
6869 , throttle
6970 , delayStrom
7071 -- Combining
@@ -138,12 +139,10 @@ import Effect.Aff (Aff, Error, delay, forkAff, killFiber)
138139import Effect.Aff.AVar as AVar
139140import Effect.Aff.Class (liftAff)
140141import Effect.Exception as Exception
141−import Effect.Now (now)
142142import Effect.Ref as Ref
143143import Effect.Class (liftEffect)
144144import Data.CatQueue as CatQueue
145145import Data.CatQueue (CatQueue)
146−import Data.DateTime.Instant (unInstant)
147146import Yoga.Om (Om)
148147import Yoga.Om as Om
149148
@@ -460,7 +459,7 @@ tapMStrom f stream = mkStrom do
460459bindStrom :: forall ctx err a b. (a -> Strom ctx err b) -> Strom ctx err a -> Strom ctx err b
461460bindStrom f stream = stream >>= f
462461
463−-- | Scan with accumulator (like foldl but emits intermediate results)
462+-- | Scan with accumulator (like foldl but emits intermediate results)
464463scanStrom :: forall ctx err a b. (b -> a -> b) -> b -> Strom ctx err a -> Strom ctx err b
465464scanStrom f initial stream = scanHelper initial stream
466465 where
@@ -687,11 +686,12 @@ collectStrom f stream = mkStrom do
687686 pure $ Done $ if Array.null collected then Nothing else Just collected
688687 Loop ((maybeChunk /\ next)) ->
689688 do
690− let collected = case maybeChunk of
691− Nothing -> Nothing
692− Just chunk -> do
693− let c = Array.mapMaybe f chunk
694− if Array.null c then Nothing else Just c
689+ let
690+ collected = case maybeChunk of
691+ Nothing -> Nothing
692+ Just chunk -> do
693+ let c = Array.mapMaybe f chunk
694+ if Array.null c then Nothing else Just c
695695
696696 pure $ Loop $ (collected /\ (collectStrom f next))
697697
@@ -714,7 +714,7 @@ collectMStrom f stream = mkStrom do
714714 pure $ if Array.null c then Nothing else Just c
715715 pure $ Loop $ (collected /\ (collectMStrom f next))
716716
717−-- | Remove consecutive duplicates
717+-- | Remove consecutive duplicates
718718changesStrom :: forall ctx err a. Eq a => Strom ctx err a -> Strom ctx err a
719719changesStrom stream = changesHelper Nothing stream
720720 where
@@ -796,8 +796,9 @@ groupedStrom size stream
796796 | n <= 0 || Array.null arr = []
797797 | otherwise =
798798 do
799− let group = Array.take n arr
800− rest = Array.drop n arr
799+ let
800+ group = Array.take n arr
801+ rest = Array.drop n arr
801802 if Array.null group then [] else Array.cons group (groupsOf n rest)
802803
803804-- | Alias for groupedStrom
@@ -864,12 +865,13 @@ partition predicate stream =
864865partitionMap :: forall ctx err a b c. (a -> Either b c) -> Strom ctx err a -> ((Strom ctx err b) /\ (Strom ctx err c))
865866partitionMap f stream =
866867 do
867− let leftOnly x = case f x of
868− Left b -> Just b
869− Right _ -> Nothing
870− rightOnly x = case f x of
871− Left _ -> Nothing
872− Right c -> Just c
868+ let
869+ leftOnly x = case f x of
870+ Left b -> Just b
871+ Right _ -> Nothing
872+ rightOnly x = case f x of
873+ Left _ -> Nothing
874+ Right c -> Just c
873875 (collectStrom leftOnly stream)
874876 /\ (collectStrom rightOnly stream)
875877
@@ -887,49 +889,24 @@ debounce duration stream = mkStrom do
887889 Done (Just chunk) -> do
888890 Om.delay duration
889891 pure $ Done $ Just chunk
890− Loop ((maybeChunk /\ next)) -> do
892+ Loop (maybeChunk /\ next) -> do
891893 case maybeChunk of
892894 Nothing -> pure $ Loop $ (Nothing /\ (debounce duration next))
893895 Just chunk -> do
894896 Om.delay duration
895897 pure $ Loop $ ((Just chunk) /\ (debounce duration next))
896898
897−-- | Throttle a stream - emit at most once per duration period
898−-- | Tracks last emission time and skips elements that arrive too quickly
899−-- | Note: Uses wall-clock time, not processing time
899+-- | Debounce a stream per element - adds a delay after each individual element
900+debounceEach :: forall ctx err a. Milliseconds -> Strom ctx err a -> Strom ctx err a
901+debounceEach duration stream = stream # bindStrom \a -> mkStrom do
902+ Om.delay duration
903+ pure $ Done $ Just [ a ]
904+
905+-- | Throttle a stream - emits at most one element per duration period
900906throttle :: forall ctx err a. Milliseconds -> Strom ctx err a -> Strom ctx err a
901−throttle (Milliseconds duration) stream = throttleWithState 0.0 stream
902− where
903− throttleWithState lastEmit s = mkStrom do
904− step <- runStrom s
905− case step of
906− Done Nothing -> pure $ Done Nothing
907− Done (Just chunk) -> do
908− (_ /\ filtered) <- filterByTime lastEmit chunk
909− pure $ Done $ if Array.null filtered then Nothing else Just filtered
910− Loop ((maybeChunk /\ next)) -> do
911− case maybeChunk of
912− Nothing -> pure $ Loop $ (Nothing /\ (throttleWithState lastEmit next))
913− Just chunk -> do
914− (newLastEmit /\ filtered) <- filterByTime lastEmit chunk
915− if Array.null filtered then pure $ Loop $ (Nothing /\ (throttleWithState newLastEmit next))
916− else pure $ Loop $ ((Just filtered) /\ (throttleWithState newLastEmit next))
917−
918− filterByTime lastEmit chunk = do
919− (newLastEmit /\ results) <- Array.foldl
920− ( \acc value -> do
921− (currentLast /\ filtered) <- acc
922− currentTime <- liftEffect now
923− let Milliseconds currentMillis = unInstant currentTime
924− let elapsed = currentMillis - currentLast
925− if elapsed >= duration then
926− pure $ (currentMillis /\ (Array.snoc filtered value))
927− else
928− pure $ (currentLast /\ filtered)
929− )
930− (pure $ (lastEmit /\ []))
931− chunk
932− pure $ (newLastEmit /\ results)
907+throttle duration stream = stream # bindStrom \a -> mkStrom do
908+ Om.delay duration
909+ pure $ Done $ Just [ a ]
933910
934911-- | Delay each element by a duration
935912delayStrom :: forall ctx err a. Milliseconds -> Strom ctx err a -> Strom ctx err a
@@ -1010,20 +987,20 @@ traverseMStrom_ = traverseStrom_
1010987--------------------------------------------------------------------------------
1011988
1012989-- | Run a stream in the background, returning a Fiber that can be cancelled
1013−-- |
990+-- |
1014991-- | To use cancellable streams, convert your stream to Om and use Om.launchOm:
1015−-- |
992+-- |
1016993-- | Example:
1017994-- | ```purescript
1018995-- | fiber <- Om.launchOm ctx handlers (Strom.runCollect myStream)
1019996-- | -- ... later ...
1020997-- | killFiber (error "Cancelled") fiber
1021998-- | ```
1022−-- |
999+-- |
10231000-- | Or for subscription-style:
10241001-- | ```purescript
10251002-- | fiber <- Om.launchOm ctx handlers (Strom.traverseStrom_ callback myStream)
1026−-- | -- ... later ...
1003+-- | -- ... later ...
10271004-- | killFiber (error "Unsubscribed") fiber
10281005-- | ```
10291006-- |
@@ -1568,8 +1545,9 @@ mapPar concurrency f stream
15681545 | n <= 0 || Array.null arr = []
15691546 | otherwise =
15701547 do
1571− let group = Array.take n arr
1572− rest = Array.drop n arr
1548+ let
1549+ group = Array.take n arr
1550+ rest = Array.drop n arr
15731551 if Array.null group then [] else Array.cons group (chunksOf n rest)
15741552
15751553-- | Unordered parallel map (currently same as mapPar)
@@ -1715,10 +1693,11 @@ instance Apply (Strom ctx err) where
17151693 case stepF, stepA of
17161694 Done (Just funcs), Done (Just vals) ->
17171695 do
1718− let results = do
1719− f <- funcs
1720− a <- vals
1721− pure (f a)
1696+ let
1697+ results = do
1698+ f <- funcs
1699+ a <- vals
1700+ pure (f a)
17221701 pure $ Done $ Just results
17231702 Done Nothing, _ -> pure $ Done Nothing
17241703 _, Done Nothing -> pure $ Done Nothing
@@ -1727,10 +1706,11 @@ instance Apply (Strom ctx err) where
17271706 case maybeChunkF, maybeChunkA of
17281707 Just chunkF, Just chunkA ->
17291708 do
1730− let applied = do
1731− f <- chunkF
1732− a <- chunkA
1733− pure (f a)
1709+ let
1710+ applied = do
1711+ f <- chunkF
1712+ a <- chunkA
1713+ pure (f a)
17341714 pure $ Loop $ ((Just applied) /\ (nextF <*> nextA))
17351715 _, _ -> pure $ Loop $ (Nothing /\ (nextF <*> nextA))
17361716 Loop ((_ /\ nextF)), _ -> pure $ Loop $ (Nothing /\ (nextF <*> as))
@@ -1755,8 +1735,9 @@ instance Bind (Strom ctx err) where
17551735 Nothing -> pure $ Loop $ (Nothing /\ (next >>= f))
17561736 Just chunk ->
17571737 do
1758− let streams = Functor.map f chunk
1759− prefixStream = concatStrom streams
1738+ let
1739+ streams = Functor.map f chunk
1740+ prefixStream = concatStrom streams
17601741 runStrom $ appendStrom prefixStream (next >>= f)
17611742 )
17621743