@@ -2,19 +2,18 @@ package japgolly.scalajs.react.test.internal
22
33import japgolly .scalajs .react .util .Effect
44
5- /**
6- * Managed resource.
5+ /** Managed resource.
76 *
87 * @since 3.0.0
98 */
109class Resource [F [_]: Effect , A ](private val acquire : F [A ], private val release : A => F [Unit ]) {
1110 private val F = implicitly[Effect [F ]]
1211
13- def use [B ](f : A => F [B ]): F [B ] =
12+ def use [B ](f : A => F [B ]): F [B ] =
1413 F .flatMap(acquire)(a => F .finallyRun(f(a), release(a)))
1514
16- def use_ [B ](f : A => B ): F [B ] =
17- use(a => F .pure (f(a)))
15+ def use_ [B ](f : A => B ): F [B ] =
16+ use(a => F .delay (f(a)))
1817
1918 def flatMap [B ](f : A => Resource [F , B ]): Resource [F , B ] = {
2019 var aOpt : Option [A ] = None
@@ -23,11 +22,11 @@ class Resource[F[_]: Effect, A](private val acquire: F[A], private val release:
2322 Resource .make(
2423 F .flatMap(acquire){ a =>
2524 aOpt = Some (a)
26- val other : Resource [F , B ] = f(a)
25+ val other : Resource [F , B ] = f(a)
2726 bReleaseOpt = Some (other.release)
2827 other.acquire
2928 },
30- b =>
29+ b =>
3130 (aOpt, bReleaseOpt) match {
3231 case (Some (a), Some (bRelease)) => F .finallyRun(bRelease(b), release(a))
3332 case _ => F .throwException(new IllegalStateException (" Resource.flatMap: release attempted without acquire being invoked" ) )
@@ -36,19 +35,22 @@ class Resource[F[_]: Effect, A](private val acquire: F[A], private val release:
3635 }
3736
3837 def map [B ](f : A => B ): Resource [F , B ] =
39- flatMap(a => Resource .pure (f(a)))
38+ flatMap(a => Resource .delay (f(a)))
4039}
4140
4241object Resource {
43- @ inline def make [F [_]: Effect , A ](acquire : F [A ], release : A => F [Unit ]): Resource [F , A ] =
42+ @ inline def make [F [_]: Effect , A ](acquire : F [A ], release : A => F [Unit ]): Resource [F , A ] =
4443 new Resource (acquire, release)
45-
46- @ inline def make_ [F [_]: Effect , A ](acquire : => A , release : A => F [Unit ]): Resource [F , A ] =
44+
45+ @ inline def make_ [F [_]: Effect , A ](acquire : => A , release : A => F [Unit ]): Resource [F , A ] =
4746 make(Effect [F ].delay(acquire), release)
4847
49- @ inline def eval [F [_]: Effect , A ](a : F [A ]): Resource [F , A ] =
48+ @ inline def eval [F [_]: Effect , A ](a : F [A ]): Resource [F , A ] =
5049 Resource .make(a, _ => Effect [F ].unit)
5150
51+ @ inline def delay [F [_]: Effect , A ](a : => A ): Resource [F , A ] =
52+ Resource .eval(Effect [F ].delay(a))
53+
5254 @ inline def pure [F [_]: Effect , A ](a : A ): Resource [F , A ] =
5355 Resource .eval(Effect [F ].pure(a))
5456
0 commit comments