@@ -33,21 +33,21 @@ trait GenSpawnLaws[F[_], E] extends MonadCancelLaws[F, E] with UniqueLaws[F] {
3333 case Outcome .Succeeded (fa) => F .productR(f.cancel)(F .map(fa)(Left (_)))
3434 case Outcome .Errored (ea) => F .productR(f.cancel)(F .raiseError(ea))
3535 case Outcome .Canceled () =>
36- F .flatMap(F .onCancel(poll(f.join), f.cancel) ) {
36+ F .flatMap(f.cancel *> f.join ) {
3737 case Outcome .Succeeded (fb) => F .map(fb)(Right (_))
3838 case Outcome .Errored (eb) => F .raiseError(eb)
39- case Outcome .Canceled () => F .productR(F .canceled)(F .never)
39+ case Outcome .Canceled () => F .productR(poll( F .canceled) )(F .never)
4040 }
4141 }
4242 case Right ((f, oc)) =>
4343 oc match {
4444 case Outcome .Succeeded (fb) => F .productR(f.cancel)(F .map(fb)(Right (_)))
4545 case Outcome .Errored (eb) => F .productR(f.cancel)(F .raiseError(eb))
4646 case Outcome .Canceled () =>
47- F .flatMap(F .onCancel(poll(f.join), f.cancel) ) {
47+ F .flatMap(f.cancel *> f.join ) {
4848 case Outcome .Succeeded (fa) => F .map(fa)(Left (_))
4949 case Outcome .Errored (ea) => F .raiseError(ea)
50- case Outcome .Canceled () => F .productR(F .canceled)(F .never)
50+ case Outcome .Canceled () => F .productR(poll( F .canceled) )(F .never)
5151 }
5252 }
5353 }
@@ -64,21 +64,21 @@ trait GenSpawnLaws[F[_], E] extends MonadCancelLaws[F, E] with UniqueLaws[F] {
6464 case Outcome .Succeeded (fa) => F .productR(f.cancel)(F .map(fa)(Left (_)))
6565 case Outcome .Errored (ea) => F .productR(f.cancel)(F .raiseError(ea))
6666 case Outcome .Canceled () =>
67- F .flatMap(F .onCancel(poll(f.join), f.cancel) ) {
67+ F .flatMap(f.cancel *> f.join ) {
6868 case Outcome .Succeeded (fb) => F .map(fb)(Right (_))
6969 case Outcome .Errored (eb) => F .raiseError(eb)
70- case Outcome .Canceled () => F .productR(F .canceled)(F .never)
70+ case Outcome .Canceled () => F .productR(poll( F .canceled) )(F .never)
7171 }
7272 }
7373 case Right ((f, oc)) =>
7474 oc match {
7575 case Outcome .Succeeded (fb) => F .productR(f.cancel)(F .map(fb)(Right (_)))
7676 case Outcome .Errored (eb) => F .productR(f.cancel)(F .raiseError(eb))
7777 case Outcome .Canceled () =>
78- F .flatMap(F .onCancel(poll(f.join), f.cancel) ) {
78+ F .flatMap(f.cancel *> f.join ) {
7979 case Outcome .Succeeded (fa) => F .map(fa)(Left (_))
8080 case Outcome .Errored (ea) => F .raiseError(ea)
81- case Outcome .Canceled () => F .productR(F .canceled)(F .never)
81+ case Outcome .Canceled () => F .productR(poll( F .canceled) )(F .never)
8282 }
8383 }
8484 }
@@ -87,25 +87,23 @@ trait GenSpawnLaws[F[_], E] extends MonadCancelLaws[F, E] with UniqueLaws[F] {
8787 F .race(F .never[A ], fb) <-> results
8888 }
8989
90+ @ deprecated(" law is no longer applicable (or correct)" , " 3.5.0" )
9091 def raceCanceledIdentityLeft [A ](fa : F [A ]) =
9192 F .race(F .canceled, fa.flatMap(F .pure(_)).handleErrorWith(F .raiseError(_))) <-> fa.map(
9293 _.asRight[Unit ])
9394
95+ @ deprecated(" law is no longer applicable (or correct)" , " 3.5.0" )
9496 def raceCanceledIdentityRight [A ](fa : F [A ]) =
9597 F .race(fa.flatMap(F .pure(_)).handleErrorWith(F .raiseError(_)), F .canceled) <-> fa.map(
9698 _.asLeft[Unit ])
9799
98100 def raceNeverNoncanceledIdentityLeft [A ](fa : F [A ]) =
99- F .race(F .never[Unit ], fa.flatMap(F .pure(_)).handleErrorWith(F .raiseError(_))) <-> F
100- .onCancel(
101- fa.flatMap(r => F .pure(r.asRight[Unit ])).handleErrorWith(F .raiseError(_)),
102- F .never)
101+ F .race(F .never[Unit ], fa.flatMap(F .pure(_)).handleErrorWith(F .raiseError(_))) <->
102+ fa.flatMap(r => F .pure(r.asRight[Unit ])).handleErrorWith(F .raiseError(_))
103103
104104 def raceNeverNoncanceledIdentityRight [A ](fa : F [A ]) =
105- F .race(fa.flatMap(F .pure(_)).handleErrorWith(F .raiseError(_)), F .never[Unit ]) <-> F
106- .onCancel(
107- fa.flatMap(r => F .pure(r.asLeft[Unit ])).handleErrorWith(F .raiseError(_)),
108- F .never)
105+ F .race(fa.flatMap(F .pure(_)).handleErrorWith(F .raiseError(_)), F .never[Unit ]) <->
106+ fa.flatMap(r => F .pure(r.asLeft[Unit ])).handleErrorWith(F .raiseError(_))
109107
110108 // I really like these laws, since they relate cede to timing, but they're definitely nondeterministic
111109 /* def raceLeftCedeYields[A](a: A) =
0 commit comments