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