git.iko.soy/rowtype-yoga/purescript-yoga-om-strom
on main help sign in
Prepare for publish v0.3.0 - add aff dep, fix structure
commit92e846e2153124827911710c2a7142a3c071dc64 authorMark <mark.eibes@gmail.com> dateTue 17 Feb 2026, 00:05 (7 months ago) parent67df62d
9 files changed+387−44
spago.lock+353−7 spago.yaml+5−4 src/Benchmark.purs+1−2 src/Yoga/Om/Strom.purs+15−16 src/Yoga/Om/Strom.test.purs+3−3 src/Yoga/Om/Strom/Examples.purs+3−3 src/Yoga/Om/Strom/WebStream.purs+2−2 src/Test/Main.purs → test/Test/Main.purs+2−3 test/Test/Strom/Spec.purs+3−4
spago.lock+353−7
@@ -57,7 +57,7 @@
5757 "refs": ">=6.0.0 <7.0.0"
5858 },
5959 {
60− "spec": ">=7.6.1 <8.0.0"
60+ "spec": ">=8.1.1 <9.0.0"
6161 },
6262 {
6363 "st": ">=6.2.0 <7.0.0"
@@ -75,14 +75,17 @@
7575 "variant": ">=8.0.0 <9.0.0"
7676 },
7777 {
78− "yoga-om": ">=1.2.2 <2.0.0"
78+ "yoga-om": ">=1.3.0 <2.0.0"
7979 }
8080 ]
8181 },
8282 "test": {
8383 "dependencies": [
8484 {
85− "spec": ">=7.6.1 <8.0.0"
85+ "spec": ">=8.0.0 <9.0.0"
86+ },
87+ {
88+ "spec-node": ">=0.0.3 <0.1.0"
8689 }
8790 ]
8891 }
@@ -112,6 +115,26 @@
112115 "unsafe-coerce"
113116 ]
114117 },
118+ "aff-retry": {
119+ "type": "registry",
120+ "version": "2.0.0",
121+ "integrity": "sha256-rKZNcP4IKSyBFQBVzrCvE0ULoJt0N/uDLLJ0dPotr4k=",
122+ "dependencies": [
123+ "aff",
124+ "arrays",
125+ "datetime",
126+ "effect",
127+ "either",
128+ "exceptions",
129+ "integers",
130+ "maybe",
131+ "newtype",
132+ "numbers",
133+ "prelude",
134+ "random",
135+ "transformers"
136+ ]
137+ },
115138 "ansi": {
116139 "type": "registry",
117140 "version": "7.0.0",
@@ -122,6 +145,53 @@
122145 "prelude"
123146 ]
124147 },
148+ "argonaut-codecs": {
149+ "type": "registry",
150+ "version": "9.1.0",
151+ "integrity": "sha256-K910SBrmYallESsm8pxJYThs7lig6hxX3M4PW33Cgew=",
152+ "dependencies": [
153+ "argonaut-core",
154+ "arrays",
155+ "bifunctors",
156+ "either",
157+ "foldable-traversable",
158+ "foreign-object",
159+ "identity",
160+ "integers",
161+ "lists",
162+ "maybe",
163+ "nonempty",
164+ "ordered-collections",
165+ "prelude",
166+ "record",
167+ "strings",
168+ "tuples"
169+ ]
170+ },
171+ "argonaut-core": {
172+ "type": "registry",
173+ "version": "7.0.0",
174+ "integrity": "sha256-gYZihtBIKthVuXXoiPphMookSf8M5aHyFYkcIWqlxTM=",
175+ "dependencies": [
176+ "arrays",
177+ "control",
178+ "either",
179+ "foreign-object",
180+ "functions",
181+ "gen",
182+ "maybe",
183+ "nonempty",
184+ "prelude",
185+ "strings",
186+ "tailrec"
187+ ]
188+ },
189+ "arraybuffer-types": {
190+ "type": "registry",
191+ "version": "3.0.2",
192+ "integrity": "sha256-p05cJnSkyeoB7VHzMyc2Eb1RwUaB7Nl0sQSqEGNEUD8=",
193+ "dependencies": []
194+ },
125195 "arrays": {
126196 "type": "registry",
127197 "version": "7.3.0",
@@ -313,6 +383,16 @@
313383 "unsafe-coerce"
314384 ]
315385 },
386+ "exitcodes": {
387+ "type": "registry",
388+ "version": "4.0.0",
389+ "integrity": "sha256-xBl4aFSEQ05Owp1ZvO6OxxvLK3LVzU35RSbj79SsePQ=",
390+ "dependencies": [
391+ "enums",
392+ "maybe",
393+ "prelude"
394+ ]
395+ },
316396 "foldable-traversable": {
317397 "type": "registry",
318398 "version": "6.0.0",
@@ -331,6 +411,42 @@
331411 "tuples"
332412 ]
333413 },
414+ "foreign": {
415+ "type": "registry",
416+ "version": "7.0.0",
417+ "integrity": "sha256-jiDRMVQfovGsbbA/FzbzYf6iWk9i2b5gNrIjz+gFfsI=",
418+ "dependencies": [
419+ "either",
420+ "functions",
421+ "integers",
422+ "lists",
423+ "maybe",
424+ "prelude",
425+ "strings",
426+ "transformers",
427+ "unsafe-coerce"
428+ ]
429+ },
430+ "foreign-object": {
431+ "type": "registry",
432+ "version": "4.1.0",
433+ "integrity": "sha256-x/Q7r80z/vmHRKvPwhYmHP/DnJciPtsyGfRTMzayKIU=",
434+ "dependencies": [
435+ "arrays",
436+ "foldable-traversable",
437+ "functions",
438+ "gen",
439+ "lists",
440+ "maybe",
441+ "prelude",
442+ "st",
443+ "tailrec",
444+ "tuples",
445+ "typelevel-prelude",
446+ "unfoldable",
447+ "unsafe-coerce"
448+ ]
449+ },
334450 "fork": {
335451 "type": "registry",
336452 "version": "6.0.0",
@@ -451,6 +567,21 @@
451567 "prelude"
452568 ]
453569 },
570+ "js-date": {
571+ "type": "registry",
572+ "version": "8.0.0",
573+ "integrity": "sha256-DNQrp4xYc8o80jtxo0aOkUeXGi6h0Xidkk2ZQ8Y4l5Y=",
574+ "dependencies": [
575+ "datetime",
576+ "effect",
577+ "enums",
578+ "foreign",
579+ "functions",
580+ "integers",
581+ "maybe",
582+ "prelude"
583+ ]
584+ },
454585 "lazy": {
455586 "type": "registry",
456587 "version": "6.0.0",
@@ -518,6 +649,107 @@
518649 "safe-coerce"
519650 ]
520651 },
652+ "node-buffer": {
653+ "type": "registry",
654+ "version": "9.0.0",
655+ "integrity": "sha256-RdQjilmEHqsT4fwpCr8Mavw8KTafYrS3ZM6zeAAVAl8=",
656+ "dependencies": [
657+ "arraybuffer-types",
658+ "effect",
659+ "functions",
660+ "maybe",
661+ "nullable",
662+ "partial",
663+ "prelude",
664+ "st",
665+ "unsafe-coerce"
666+ ]
667+ },
668+ "node-event-emitter": {
669+ "type": "registry",
670+ "version": "3.0.0",
671+ "integrity": "sha256-wodx71NxJBPXOaawFn01V1ByYB2vT+I3RuV2giOVKMg=",
672+ "dependencies": [
673+ "effect",
674+ "either",
675+ "functions",
676+ "maybe",
677+ "nullable",
678+ "prelude",
679+ "unsafe-coerce"
680+ ]
681+ },
682+ "node-fs": {
683+ "type": "registry",
684+ "version": "9.2.0",
685+ "integrity": "sha256-fxioTSm9y47WuYs9F/7nxCh/RVDCl3Kr3Hg779J4SJA=",
686+ "dependencies": [
687+ "aff",
688+ "datetime",
689+ "effect",
690+ "either",
691+ "enums",
692+ "exceptions",
693+ "functions",
694+ "integers",
695+ "js-date",
696+ "maybe",
697+ "node-buffer",
698+ "node-path",
699+ "node-streams",
700+ "nullable",
701+ "partial",
702+ "prelude",
703+ "strings"
704+ ]
705+ },
706+ "node-path": {
707+ "type": "registry",
708+ "version": "5.0.1",
709+ "integrity": "sha256-j7n/SmpVz0FOMJl4XZop3ofJ+MeIPkMNqUEUKHEL6Us=",
710+ "dependencies": [
711+ "effect"
712+ ]
713+ },
714+ "node-process": {
715+ "type": "registry",
716+ "version": "11.2.0",
717+ "integrity": "sha256-onzKeNmaeYfN3HSDPqSFTrrP2Yl9tnVsfKKhnf2plxM=",
718+ "dependencies": [
719+ "effect",
720+ "exceptions",
721+ "foreign",
722+ "foreign-object",
723+ "maybe",
724+ "node-event-emitter",
725+ "node-streams",
726+ "nullable",
727+ "posix-types",
728+ "prelude",
729+ "strings"
730+ ]
731+ },
732+ "node-streams": {
733+ "type": "registry",
734+ "version": "9.0.1",
735+ "integrity": "sha256-yuVGm/R/tBr4Nphi+a1a984Z0fkmN9Q5wWtSmbmJTpA=",
736+ "dependencies": [
737+ "aff",
738+ "arrays",
739+ "effect",
740+ "either",
741+ "exceptions",
742+ "maybe",
743+ "node-buffer",
744+ "node-event-emitter",
745+ "nullable",
746+ "prelude",
747+ "refs",
748+ "st",
749+ "tailrec",
750+ "unsafe-coerce"
751+ ]
752+ },
521753 "nonempty": {
522754 "type": "registry",
523755 "version": "7.0.0",
@@ -541,6 +773,16 @@
541773 "prelude"
542774 ]
543775 },
776+ "nullable": {
777+ "type": "registry",
778+ "version": "6.0.0",
779+ "integrity": "sha256-CDAZk+L9Sc0GCFTkE8n+qdp4Ys8avvnkU+m2hVALt7M=",
780+ "dependencies": [
781+ "functions",
782+ "maybe",
783+ "prelude"
784+ ]
785+ },
544786 "numbers": {
545787 "type": "registry",
546788 "version": "9.0.1",
@@ -551,6 +793,56 @@
551793 "prelude"
552794 ]
553795 },
796+ "open-memoize": {
797+ "type": "registry",
798+ "version": "6.2.0",
799+ "integrity": "sha256-yJLuVYX8FocHIJ+6q7efH/Pj4S+e1Y57DZ5Dn7qf4ww=",
800+ "dependencies": [
801+ "either",
802+ "integers",
803+ "lazy",
804+ "lists",
805+ "maybe",
806+ "partial",
807+ "prelude",
808+ "strings",
809+ "tuples"
810+ ]
811+ },
812+ "optparse": {
813+ "type": "registry",
814+ "version": "5.0.1",
815+ "integrity": "sha256-2btDjHPRR0uujUQJuZAN9AzvVoXe7yG6IwnY5evERhQ=",
816+ "dependencies": [
817+ "arrays",
818+ "bifunctors",
819+ "control",
820+ "effect",
821+ "either",
822+ "enums",
823+ "exists",
824+ "exitcodes",
825+ "foldable-traversable",
826+ "free",
827+ "integers",
828+ "lazy",
829+ "lists",
830+ "maybe",
831+ "newtype",
832+ "node-buffer",
833+ "node-process",
834+ "node-streams",
835+ "nonempty",
836+ "numbers",
837+ "open-memoize",
838+ "partial",
839+ "prelude",
840+ "strings",
841+ "tailrec",
842+ "transformers",
843+ "tuples"
844+ ]
845+ },
554846 "ordered-collections": {
555847 "type": "registry",
556848 "version": "3.2.0",
@@ -626,6 +918,16 @@
626918 "tuples"
627919 ]
628920 },
921+ "posix-types": {
922+ "type": "registry",
923+ "version": "6.0.0",
924+ "integrity": "sha256-Je5jG439F/SFO/IvVevZnWVxDIonrehlKuJkefP2lHE=",
925+ "dependencies": [
926+ "maybe",
927+ "newtype",
928+ "prelude"
929+ ]
930+ },
629931 "prelude": {
630932 "type": "registry",
631933 "version": "6.0.2",
@@ -647,6 +949,16 @@
647949 "tuples"
648950 ]
649951 },
952+ "random": {
953+ "type": "registry",
954+ "version": "6.0.0",
955+ "integrity": "sha256-7sZRo6P9UIiXDZ9s2QL9T8h3wlIwLdQrR4+oZKOijQw=",
956+ "dependencies": [
957+ "effect",
958+ "integers",
959+ "prelude"
960+ ]
961+ },
650962 "record": {
651963 "type": "registry",
652964 "version": "4.0.0",
@@ -689,8 +1001,8 @@
6891001 },
6901002 "spec": {
6911003 "type": "registry",
692− "version": "7.6.1",
693− "integrity": "sha256-5GysDOS1gVbbGX75YXUdhww3h2S246Ck0sS6yt+ig+0=",
1004+ "version": "8.1.1",
1005+ "integrity": "sha256-b6qjDb7lUJGLV+WEoywLu6BCXC4zGpfbN43mTL+vBeI=",
6941006 "dependencies": [
6951007 "aff",
6961008 "ansi",
@@ -721,6 +1033,38 @@
7211033 "tuples"
7221034 ]
7231035 },
1036+ "spec-node": {
1037+ "type": "registry",
1038+ "version": "0.0.3",
1039+ "integrity": "sha256-8/9+g0obbamV0YtqzmttbWs8HaWF7CEeW+eDtqzuAAo=",
1040+ "dependencies": [
1041+ "aff",
1042+ "argonaut-codecs",
1043+ "argonaut-core",
1044+ "arrays",
1045+ "control",
1046+ "datetime",
1047+ "effect",
1048+ "either",
1049+ "foldable-traversable",
1050+ "identity",
1051+ "integers",
1052+ "maybe",
1053+ "newtype",
1054+ "node-buffer",
1055+ "node-fs",
1056+ "node-process",
1057+ "now",
1058+ "numbers",
1059+ "optparse",
1060+ "ordered-collections",
1061+ "partial",
1062+ "prelude",
1063+ "spec",
1064+ "strings",
1065+ "tuples"
1066+ ]
1067+ },
7241068 "st": {
7251069 "type": "registry",
7261070 "version": "6.2.0",
@@ -871,10 +1215,11 @@
8711215 },
8721216 "yoga-om": {
8731217 "type": "registry",
874− "version": "1.2.2",
875− "integrity": "sha256-uDV3/o8mUOTIgSEQFqIATPyladzL8BcjURvfS901hgI=",
1218+ "version": "1.3.0",
1219+ "integrity": "sha256-KWJXUgLTj7MpWTiYldF56WFYxQ/aNqyGp81T2B9fQ4k=",
8761220 "dependencies": [
8771221 "aff",
1222+ "aff-retry",
8781223 "avar",
8791224 "console",
8801225 "control",
@@ -889,6 +1234,7 @@
8891234 "prelude",
8901235 "record",
8911236 "record-studio",
1237+ "refs",
8921238 "tailrec",
8931239 "transformers",
8941240 "tuples",
spago.yaml+5−4
@@ -3,7 +3,7 @@ workspace: {}
33package:
44 name: yoga-om-strom
55 publish:
6− version: 0.2.0
6+ version: 0.3.0
77 license: MIT-0
88 exclude:
99 - "src/**/*.test.purs"
@@ -29,14 +29,15 @@ package:
2929 - now: ">=6.0.0 <7.0.0"
3030 - prelude: ">=6.0.2 <7.0.0"
3131 - refs: ">=6.0.0 <7.0.0"
32− - spec: ">=7.6.1 <8.0.0"
32+ - spec: ">=8.1.1 <9.0.0"
3333 - st: ">=6.2.0 <7.0.0"
3434 - tailrec: ">=6.1.0 <7.0.0"
3535 - transformers: ">=6.1.0 <7.0.0"
3636 - tuples: ">=7.0.0 <8.0.0"
3737 - variant: ">=8.0.0 <9.0.0"
38− - yoga-om: ">=1.2.2 <2.0.0"
38+ - yoga-om: ">=1.3.0 <2.0.0"
3939 test:
4040 main: Test.Main.Strom
4141 dependencies:
42− - spec: ">=7.6.1 <8.0.0"
42+ - spec: ">=8.0.0 <9.0.0"
43+ - spec-node: ">=0.0.3 <0.1.0"
src/Benchmark.purs+1−2
@@ -10,10 +10,9 @@ import Data.Tuple (Tuple(..))
1010import Effect (Effect)
1111import Effect.Aff (Aff, launchAff_, throwError)
1212import Effect.Class (liftEffect)
13−import Effect.Exception (Error)
1413import Effect.Class.Console as Console
1514import Effect.Now (now)
16−import Data.DateTime.Instant (unInstant, diff)
15+import Data.DateTime.Instant (diff)
1716import Yoga.Om as Om
1817import Yoga.Om.Strom as Strom
1918
src/Yoga/Om/Strom.purs+15−16
@@ -134,7 +134,7 @@ import Data.Time.Duration (Milliseconds(..))
134134import Data.Traversable (traverse, traverse_)
135135import Data.Tuple.Nested (type (/\), (/\))
136136import Data.Variant (Variant)
137−import Effect.Aff (Aff, Error, delay, forkAff, joinFiber, killFiber)
137+import Effect.Aff (Aff, Error, delay, forkAff, killFiber)
138138import Effect.Aff.AVar as AVar
139139import Effect.Aff.Class (liftAff)
140140import Effect.Exception as Exception
@@ -506,7 +506,7 @@ mapAccumStrom f initial stream = mapAccumHelper initial stream
506506 Done Nothing -> pure $ Done Nothing
507507 Done (Just chunk) -> do
508508 let
509− (finalState /\ results) = Array.foldl
509+ (_ /\ results) = Array.foldl
510510 ( \((st /\ acc)) a ->
511511 do
512512 let (newSt /\ b) = f st a
@@ -575,7 +575,6 @@ takeStrom n stream = takeHelper n stream
575575 Nothing -> pure $ Loop $ (Nothing /\ (takeHelper remaining next))
576576 Just chunk -> do
577577 let
578− chunkLen = Array.length chunk
579578 taken = Array.take remaining chunk
580579 numTaken = Array.length taken
581580 newRemaining = remaining - numTaken
@@ -758,16 +757,16 @@ groupedStrom size stream
758757 | size <= 0 = empty
759758 | otherwise = groupedHelper [] stream
760759 where
761− groupedHelper buffer s = mkStrom do
760+ groupedHelper buf s = mkStrom do
762761 step <- runStrom s
763762 case step of
764763 Done Nothing ->
765764 -- End of stream, emit remaining buffer if non-empty
766− pure $ Done $ if Array.null buffer then Nothing else Just [ buffer ]
765+ pure $ Done $ if Array.null buf then Nothing else Just [ buf ]
767766 Done (Just chunk) -> do
768767 -- Process final chunk with buffer
769768 let
770− combined = buffer <> chunk
769+ combined = buf <> chunk
771770 groups = groupsOf size combined
772771 completeGroups = Array.dropEnd 1 groups
773772 lastGroup = case Array.last groups of
@@ -780,10 +779,10 @@ groupedStrom size stream
780779 else pure $ Done $ if Array.null (completeGroups <> [ remainder ]) then Nothing else Just (completeGroups <> [ remainder ])
781780 Loop ((maybeChunk /\ next)) ->
782781 case maybeChunk of
783− Nothing -> pure $ Loop $ (Nothing /\ (groupedHelper buffer next))
782+ Nothing -> pure $ Loop $ (Nothing /\ (groupedHelper buf next))
784783 Just chunk -> do
785784 let
786− combined = buffer <> chunk
785+ combined = buf <> chunk
787786 groups = groupsOf size combined
788787 completeGroups = if Array.null groups then [] else Array.dropEnd 1 groups
789788 newBuffer = case Array.last groups of
@@ -810,11 +809,11 @@ chunkedStrom = groupedStrom
810809groupByStrom :: forall ctx err a k. Eq k => (a -> k) -> Strom ctx err a -> Strom ctx err (Array a)
811810groupByStrom keyFn stream = groupByHelper Nothing [] stream
812811 where
813− groupByHelper lastKey buffer s = mkStrom do
812+ groupByHelper lastKey buf s = mkStrom do
814813 step <- runStrom s
815814 case step of
816815 Done Nothing ->
817− pure $ Done $ if Array.null buffer then Nothing else Just [ buffer ]
816+ pure $ Done $ if Array.null buf then Nothing else Just [ buf ]
818817 Done (Just chunk) -> do
819818 let
820819 (_ /\ result) = Array.foldl
@@ -827,7 +826,7 @@ groupByStrom keyFn stream = groupByHelper Nothing [] stream
827826 if k == itemKey then ((Just itemKey) /\ { groups: acc.groups, buffer: Array.snoc acc.buffer item })
828827 else ((Just itemKey) /\ { groups: Array.snoc acc.groups acc.buffer, buffer: [ item ] })
829828 )
830− (lastKey /\ { groups: [], buffer })
829+ (lastKey /\ { groups: [], buffer: buf })
831830 chunk
832831 allGroups =
833832 if Array.null result.buffer then result.groups
@@ -835,7 +834,7 @@ groupByStrom keyFn stream = groupByHelper Nothing [] stream
835834 pure $ Done $ if Array.null allGroups then Nothing else Just allGroups
836835 Loop ((maybeChunk /\ next)) ->
837836 case maybeChunk of
838− Nothing -> pure $ Loop $ (Nothing /\ (groupByHelper lastKey buffer next))
837+ Nothing -> pure $ Loop $ (Nothing /\ (groupByHelper lastKey buf next))
839838 Just chunk -> do
840839 let
841840 (newKey /\ result) = Array.foldl
@@ -848,7 +847,7 @@ groupByStrom keyFn stream = groupByHelper Nothing [] stream
848847 if k == itemKey then ((Just itemKey) /\ { groups: acc.groups, buffer: Array.snoc acc.buffer item })
849848 else ((Just itemKey) /\ { groups: Array.snoc acc.groups acc.buffer, buffer: [ item ] })
850849 )
851− (lastKey /\ { groups: [], buffer })
850+ (lastKey /\ { groups: [], buffer: buf })
852851 chunk
853852 if Array.null result.groups then pure $ Loop $ (Nothing /\ (groupByHelper newKey result.buffer next))
854853 else pure $ Loop $ ((Just result.groups) /\ (groupByHelper newKey result.buffer next))
@@ -906,7 +905,7 @@ throttle (Milliseconds duration) stream = throttleWithState 0.0 stream
906905 case step of
907906 Done Nothing -> pure $ Done Nothing
908907 Done (Just chunk) -> do
909− (newLastEmit /\ filtered) <- filterByTime lastEmit chunk
908+ (_ /\ filtered) <- filterByTime lastEmit chunk
910909 pure $ Done $ if Array.null filtered then Nothing else Just filtered
911910 Loop ((maybeChunk /\ next)) -> do
912911 case maybeChunk of
@@ -1394,7 +1393,7 @@ mergeNDWithStrategy bufferCapacity strategy stream1 stream2 = mkStrom do
13941393 let
13951394 producer s = do
13961395 stepResult <- Om.runReader ctx (runStrom s)
1397− step <- either (\e -> throwError (Exception.error "Stream error")) pure stepResult
1396+ step <- either (\_ -> throwError (Exception.error "Stream error")) pure stepResult
13981397 case step of
13991398 Done Nothing ->
14001399 enqueue (StreamDone StreamId1)
@@ -1413,7 +1412,7 @@ mergeNDWithStrategy bufferCapacity strategy stream1 stream2 = mkStrom do
14131412 let
14141413 producer s = do
14151414 stepResult <- Om.runReader ctx (runStrom s)
1416− step <- either (\e -> throwError (Exception.error "Stream error")) pure stepResult
1415+ step <- either (\_ -> throwError (Exception.error "Stream error")) pure stepResult
14171416 case step of
14181417 Done Nothing ->
14191418 enqueue (StreamDone StreamId2)
src/Yoga/Om/Strom.test.purs+3−3
@@ -10,9 +10,9 @@ import Data.Time.Duration (Milliseconds(..))
1010import Effect.Aff (Aff)
1111import Effect.Ref as Ref
1212import Effect.Class (liftEffect)
13−import Effect.Exception (throwException, error)
13+import Effect.Exception (throwException)
1414import Test.Spec (Spec, describe, it)
15−import Test.Spec.Assertions (shouldEqual, fail)
15+import Test.Spec.Assertions (shouldEqual)
1616import Yoga.Om (Om)
1717import Yoga.Om as Om
1818import Yoga.Om.Strom as Strom
@@ -172,7 +172,7 @@ spec = do
172172 result `shouldEqual` [ "1a", "2b", "3c" ]
173173
174174 it "tap observes without modifying" do
175− sideEffectRef <- liftEffect $ Ref.new 0
175+ _sideEffectRef <- liftEffect $ Ref.new 0
176176 result <- runOm $
177177 Strom.fromArray [ 1, 2, 3 ]
178178 # Strom.tapStrom (\n -> let _ = n in unit) -- Pure observation
src/Yoga/Om/Strom/Examples.purs+3−3
@@ -106,7 +106,7 @@ example4b = do
106106example5 :: Om {} () (Array (Tuple Int String))
107107example5 = do
108108 let numbers = Strom.rangeStrom 1 5
109− let letters = Strom.fromArray ["a", "b", "c", "d", "e"]
109+ let _letters = Strom.fromArray ["a", "b", "c", "d", "e"]
110110 -- TODO: zipStrom not yet implemented
111111 numbers # Strom.mapStrom (\n -> Tuple n "stub") # Strom.runCollect
112112
@@ -288,11 +288,11 @@ example11 = do
288288 Om.delay (Milliseconds 100.0)
289289 pure 1
290290
291− source2 = Strom.fromOm do
291+ _source2 = Strom.fromOm do
292292 Om.delay (Milliseconds 50.0) -- This will win
293293 pure 2
294294
295− source3 = Strom.fromOm do
295+ _source3 = Strom.fromOm do
296296 Om.delay (Milliseconds 200.0)
297297 pure 3
298298
src/Yoga/Om/Strom/WebStream.purs+2−2
@@ -174,7 +174,7 @@ stromToReadableStream cleanup ctx strom = do
174174 Nothing -> pure unit
175175 Just fiber ->
176176 void $ launchAff $ killFiber (Exception.error "cancelled") fiber
177− currentStrom <- Ref.read stromRef
177+ _currentStrom <- Ref.read stromRef
178178 pure unit -- TODO: cancelStrom currentStrom
179179 cleanup
180180
@@ -295,7 +295,7 @@ pipeThrough ctx transform readable = do
295295-- | Internal: pull from a Reader in batches with configurable chunk size,
296296-- | calling a cleanup action on stream completion.
297297readerToStromWithCleanupAndSize :: forall a ctx err. Int -> Effect Unit -> Reader a -> Strom ctx err a
298−readerToStromWithCleanupAndSize batchSize cleanup reader = go -- TODO: addCancel cleanup go
298+readerToStromWithCleanupAndSize batchSize _cleanup reader = go -- TODO: addCancel cleanup go
299299 where
300300 go :: Strom ctx err a
301301 go = mkStrom do
src/Test/Main.purs → test/Test/Main.pursrenamed+2−3
@@ -3,11 +3,10 @@ module Test.Main.Strom where
33import Prelude
44
55import Effect (Effect)
6−import Effect.Aff (launchAff_)
76import Test.Spec.Reporter (consoleReporter)
8−import Test.Spec.Runner (runSpec)
7+import Test.Spec.Runner.Node (runSpecAndExitProcess)
98import Yoga.Om.Strom.Test as StromSpec
109
1110main :: Effect Unit
12−main = launchAff_ $ runSpec [consoleReporter] do
11+main = runSpecAndExitProcess [consoleReporter] do
1312 StromSpec.spec
test/Test/Strom/Spec.purs+3−4
@@ -6,13 +6,12 @@ import Control.Alt ((<|>))
66import Data.Array as Array
77import Data.Maybe (Maybe(..))
88import Data.Tuple (Tuple(..))
9−import Data.Time.Duration (Milliseconds(..))
109import Effect.Aff (Aff)
1110import Effect.Ref as Ref
1211import Effect.Class (liftEffect)
13−import Effect.Exception (throwException, error)
12+import Effect.Exception (throwException)
1413import Test.Spec (Spec, describe, it)
15−import Test.Spec.Assertions (shouldEqual, fail)
14+import Test.Spec.Assertions (shouldEqual)
1615import Yoga.Om (Om)
1716import Yoga.Om as Om
1817import Yoga.Om.Strom as Strom
@@ -156,7 +155,7 @@ spec = do
156155 result `shouldEqual` [ "1a", "2b", "3c" ]
157156
158157 it "tap observes without modifying" do
159− sideEffectRef <- liftEffect $ Ref.new 0
158+ _sideEffectRef <- liftEffect $ Ref.new 0
160159 result <- runOm $
161160 Strom.fromArray [ 1, 2, 3 ]
162161 # Strom.tapStrom (\n -> let _ = n in unit) -- Pure observation