Repository: 7mind/izumi
Pull request #1233 (2020-09-18 18:50:13)

Update scalafmt-core to 2.7.2
Updates [org.scalameta:scalafmt-core](https://github.com/scalameta/scalafmt) from 2.7.1 to 2.7.2.
[GitHub Release Notes](https://github.com/scalameta/scalafmt/releases/tag/v2.7.2) - [Version Diff](https://github.com/scalameta/scalafmt/compare/v2.7.1...v2.7.2)

I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.

If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.

Configure Scala Steward for your repository with a [`.scala-steward.conf`](https://github.com/fthomas/scala-steward/blob/ecfbfb1558789f05b4ed6d0564d62f6c65c7831a/docs/repo-specific-configuration.md) file.

Have a fantastic day writing Scala!

<details>
<summary>Ignore future updates</summary>

Add this to your `.scala-steward.conf` file to ignore future updates of this dependency:
```
updates.ignore = [ { groupId = "org.scalameta", artifactId = "scalafmt-core" } ]
```
</details>

labels: library-update, semver-patch


Patch:
diff --git a/.scalafmt.conf b/.scalafmt.conf
index 6ffffd314..5a105293e 100644
--- a/.scalafmt.conf
+++ b/.scalafmt.conf
@@ -1,4 +1,4 @@
-version = "2.7.1"
+version = "2.7.2"
 project.git = true
 
 maxColumn = 170
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOApplicative3.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOApplicative3.scala
index 9feed3e38..ec18c911d 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOApplicative3.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOApplicative3.scala
@@ -23,7 +23,7 @@ trait BIOApplicative3[F[-_, +_, +_]] extends BIOFunctor3[F] {
   def sequence[R, E, A, B](l: Iterable[F[R, E, A]]): F[R, E, List[A]] = traverse(l)(identity)
   def sequence_[R, E](l: Iterable[F[R, E, Unit]]): F[R, E, Unit] = void(traverse(l)(identity))
 
-  final val unit: F[Any, Nothing, Unit] = pure(())
+  def unit: F[Any, Nothing, Unit] = pure(())
   @inline final def traverse[R, E, A, B](o: Option[A])(f: A => F[R, E, B]): F[R, E, Option[B]] = o match {
     case Some(a) => map(f(a))(Some(_))
     case None => pure(None)
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOApplicativeError3.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOApplicativeError3.scala
index 3853fc99f..c261b754a 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOApplicativeError3.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOApplicativeError3.scala
@@ -3,7 +3,7 @@ package izumi.functional.bio
 import scala.util.Try
 
 trait BIOApplicativeError3[F[-_, +_, +_]] extends BIOGuarantee3[F] with BIOBifunctor3[F] {
-  override val InnerF: BIOFunctor3[F] = this
+  override def InnerF: BIOFunctor3[F] = this
 
   def fail[E](v: => E): F[Any, E, Nothing]
 
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOAsk.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOAsk.scala
index 59e05f88e..55a446dc3 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOAsk.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOAsk.scala
@@ -1,7 +1,7 @@
 package izumi.functional.bio
 
 trait BIOAsk[FR[-_, +_, +_]] extends BIORoot {
-  val InnerF: BIOApplicative3[FR]
+  def InnerF: BIOApplicative3[FR]
   def ask[R]: FR[R, Nothing, R]
 
   // defaults
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOAsync3.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOAsync3.scala
index 4db9defea..657c33877 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOAsync3.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOAsync3.scala
@@ -5,7 +5,7 @@ import java.util.concurrent.CompletionStage
 import scala.concurrent.{ExecutionContext, Future}
 
 trait BIOAsync3[F[-_, +_, +_]] extends BIO3[F] with BIOParallel3[F] {
-  override val InnerF: BIOMonad3[F] = this
+  override def InnerF: BIOMonad3[F] = this
   final type Canceler = F[Any, Nothing, Unit]
 
   def async[E, A](register: (Either[E, A] => Unit) => Unit): F[Any, E, A]
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOBifunctor3.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOBifunctor3.scala
index 8e79a750d..53b6b5c17 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOBifunctor3.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOBifunctor3.scala
@@ -3,7 +3,7 @@ package izumi.functional.bio
 import izumi.fundamentals.platform.language.unused
 
 trait BIOBifunctor3[F[-_, +_, +_]] extends BIORoot {
-  val InnerF: BIOFunctor3[F]
+  def InnerF: BIOFunctor3[F]
 
   def bimap[R, E, A, E2, A2](r: F[R, E, A])(f: E => E2, g: A => A2): F[R, E2, A2]
   def leftMap[R, E, A, E2](r: F[R, E, A])(f: E => E2): F[R, E2, A] = bimap(r)(f, identity)
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOError3.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOError3.scala
index 8049dceae..f066f8a8d 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOError3.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOError3.scala
@@ -1,7 +1,6 @@
 package izumi.functional.bio
 
 import izumi.fundamentals.platform.language.SourceFilePositionMaterializer
-import zio.ZIO
 
 trait BIOError3[F[-_, +_, +_]] extends BIOApplicativeError3[F] with BIOMonad3[F] {
 
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOFork3.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOFork3.scala
index 883608e6c..fbbe73ef7 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOFork3.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOFork3.scala
@@ -1,8 +1,5 @@
 package izumi.functional.bio
 
-import izumi.functional.bio.LowPriorityBIOForkInstances._BIOForkMonixBIO
-import izumi.fundamentals.platform.language.unused
-import monix.bio.IO
 import zio.ZIO
 
 trait BIOFork3[F[-_, +_, +_]] extends BIOForkInstances {
@@ -10,35 +7,12 @@ trait BIOFork3[F[-_, +_, +_]] extends BIOForkInstances {
 }
 
 private[bio] sealed trait BIOForkInstances
-
 object BIOForkInstances extends LowPriorityBIOForkInstances {
-  implicit val BIOForkZio: BIOFork3[ZIO] = new BIOFork3[ZIO] {
-    override def fork[R, E, A](f: ZIO[R, E, A]): ZIO[R, Nothing, BIOFiber3[ZIO, E, A]] =
-      f
-        // FIXME: ZIO Bug / feature (interruption inheritance) breaks behavior in bracket/DIResource
-        //  unless wrapped in `interruptible`
-        //  see: https://github.com/zio/zio/issues/945
-        .interruptible
-        .forkDaemon
-        .map(BIOFiber.fromZIO)
-  }
+  @inline implicit def BIOForkZio: BIOFork3[ZIO] = impl.BIOForkZIO
 }
-
 sealed trait LowPriorityBIOForkInstances extends LowPriorityBIOForkInstances1 {
-  implicit def BIOForkMonix[BIOForkMonixBIO](implicit @unused M: _BIOForkMonixBIO[BIOForkMonixBIO]): BIOForkMonixBIO = {
-    new BIOFork[monix.bio.IO] {
-      override def fork[R, E, A](f: IO[E, A]): IO[Nothing, BIOFiber[monix.bio.IO, E, A]] = f.start.map(BIOFiber.fromMonix)
-    }.asInstanceOf[BIOForkMonixBIO]
-  }
+  @inline implicit def BIOForkMonix: BIOFork[monix.bio.IO] = impl.BIOForkMonix
 }
-
-object LowPriorityBIOForkInstances {
-  final abstract class _BIOForkMonixBIO[A]
-  object _BIOForkMonixBIO {
-    @inline implicit final def get: _BIOForkMonixBIO[BIOFork[monix.bio.IO]] = null
-  }
-}
-
 sealed trait LowPriorityBIOForkInstances1 {
   @inline implicit final def BIOFork3To2[FR[-_, +_, +_], R](implicit BIOFork3: BIOFork3[FR]): BIOFork[FR[R, +?, +?]] = cast3To2(BIOFork3)
 }
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOLocal.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOLocal.scala
index d83f88023..61633bd12 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOLocal.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOLocal.scala
@@ -3,7 +3,7 @@ package izumi.functional.bio
 import cats.data.Kleisli
 
 trait BIOLocal[FR[-_, +_, +_]] extends BIOMonadAsk[FR] with BIOArrowChoice[FR] with BIOLocalInstances {
-  override val InnerF: BIOMonad3[FR]
+  override def InnerF: BIOMonad3[FR]
 
   def provide[R, E, A](fr: FR[R, E, A])(env: => R): FR[Any, E, A] = contramap(fr)((_: Any) => env)
 
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOMonadAsk.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOMonadAsk.scala
index f8ac59e94..2078578d9 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOMonadAsk.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOMonadAsk.scala
@@ -3,7 +3,7 @@ package izumi.functional.bio
 import cats.data.Kleisli
 
 trait BIOMonadAsk[FR[-_, +_, +_]] extends BIOAsk[FR] with BIOMonadAskSyntax {
-  override val InnerF: BIOMonad3[FR]
+  override def InnerF: BIOMonad3[FR]
 
   def access[R, E, A](f: R => FR[R, E, A]): FR[R, E, A]
 }
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOParallel3.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOParallel3.scala
index 508d9dc50..09407e40b 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOParallel3.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOParallel3.scala
@@ -1,7 +1,7 @@
 package izumi.functional.bio
 
 trait BIOParallel3[F[-_, +_, +_]] extends BIORoot {
-  val InnerF: BIOMonad3[F]
+  def InnerF: BIOMonad3[F]
 
   def parTraverse[R, E, A, B](l: Iterable[A])(f: A => F[R, E, B]): F[R, E, List[B]]
   def parTraverseN[R, E, A, B](maxConcurrent: Int)(l: Iterable[A])(f: A => F[R, E, B]): F[R, E, List[B]]
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOProfunctor.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOProfunctor.scala
index 00f01c27d..a142deba3 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOProfunctor.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOProfunctor.scala
@@ -1,7 +1,7 @@
 package izumi.functional.bio
 
 trait BIOProfunctor[FR[-_, +_, +_]] extends BIORoot {
-  val InnerF: BIOFunctor3[FR]
+  def InnerF: BIOFunctor3[FR]
 
   def dimap[R1, E, A1, R2, A2](fra: FR[R1, E, A1])(fr: R2 => R1)(fa: A1 => A2): FR[R2, E, A2]
 
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIORoot.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIORoot.scala
index adb6324c6..fee94c755 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIORoot.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIORoot.scala
@@ -23,7 +23,7 @@ object BIORoot extends BIORootInstancesLowPriority1 {
   @inline implicit final def AttachBIOFork3[FR[-_, +_, +_]](@unused self: BIOFunctor3[FR])(implicit BIOFork: BIOFork3[FR]): BIOFork.type = BIOFork
   @inline implicit final def AttachBlockingIO3[FR[-_, +_, +_]](@unused self: BIOFunctor3[FR])(implicit BlockingIO: BlockingIO3[FR]): BlockingIO.type = BlockingIO
 
-  implicit final class KleisliSyntaxAttached[FR[-_, +_, +_]](private val FR0: BIOFunctor3[FR]) extends AnyVal {
+  implicit final class KleisliSyntaxAttached[FR[-_, +_, +_]](@unused private val FR0: BIOFunctor3[FR]) extends AnyVal {
     @inline def fromKleisli[R, E, A](k: Kleisli[FR[Any, E, ?], R, A])(implicit FR: BIOMonadAsk[FR]): FR[R, E, A] = FR.fromKleisli(k)
     @inline def toKleisli[R, E, A](fr: FR[R, E, A])(implicit FR: BIOLocal[FR]): Kleisli[FR[Any, E, ?], R, A] = FR.toKleisli(fr)
   }
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOTemporal3.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOTemporal3.scala
index 2f8313347..ab2b7d684 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOTemporal3.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/BIOTemporal3.scala
@@ -1,8 +1,7 @@
 package izumi.functional.bio
 
-import izumi.functional.bio.BIOTemporalInstancesLowPriority1.{_BIOTemporalMonixBIO, _TimerMonixUIO}
 import izumi.functional.bio.impl.{BIOTemporalMonix, BIOTemporalZio}
-import izumi.fundamentals.platform.language.unused
+import monix.bio
 import zio.ZIO
 
 import scala.concurrent.duration.{Duration, FiniteDuration}
@@ -34,22 +33,6 @@ private[bio] sealed trait BIOTemporalInstances
 object BIOTemporalInstances extends BIOTemporalInstancesLowPriority1 {
   @inline implicit final def BIOTemporal3Zio(implicit clockService: zio.clock.Clock): BIOTemporal3[ZIO] = new BIOTemporalZio(clockService)
 }
-
 sealed trait BIOTemporalInstancesLowPriority1 {
-  @inline implicit final def BIOTemporalMonix[BIOTemporalMonixBIO, TimerMonixUIO](
-    implicit
-    @unused A: _BIOTemporalMonixBIO[BIOTemporalMonixBIO],
-    @unused T: _TimerMonixUIO[TimerMonixUIO],
-    timer: TimerMonixUIO,
-  ): BIOTemporalMonixBIO = new BIOTemporalMonix(timer.asInstanceOf[cats.effect.Timer[monix.bio.UIO]]).asInstanceOf[BIOTemporalMonixBIO]
-}
-object BIOTemporalInstancesLowPriority1 {
-  final abstract class _BIOTemporalMonixBIO[A]
-  object _BIOTemporalMonixBIO {
-    @inline implicit final def get: _BIOTemporalMonixBIO[BIOTemporal[monix.bio.IO]] = null
-  }
-  final abstract class _TimerMonixUIO[A]
-  object _TimerMonixUIO {
-    @inline implicit final def get: _TimerMonixUIO[cats.effect.Timer[monix.bio.UIO]] = null
-  }
+  @inline implicit final def BIOTemporalMonix(implicit clock: cats.effect.Timer[bio.UIO]): BIOTemporal[bio.IO] = new BIOTemporalMonix(clock)
 }
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncMonix.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncMonix.scala
index 7a8bd3722..9fb32d352 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncMonix.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncMonix.scala
@@ -12,6 +12,7 @@ import scala.util.Try
 object BIOAsyncMonix extends BIOAsyncMonix
 
 class BIOAsyncMonix extends BIOAsync[IO] {
+  override final def unit: IO[Nothing, Unit] = IO.unit
   override final def pure[A](a: A): IO[Nothing, A] = IO.pure(a)
   override final def sync[A](effect: => A): IO[Nothing, A] = IO.evalTotal(effect)
   override final def syncThrowable[A](effect: => A): IO[Throwable, A] = IO.eval(effect)
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncZio.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncZio.scala
index 46a4cd98a..6cae78a4d 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncZio.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOAsyncZio.scala
@@ -13,6 +13,9 @@ import scala.util.Try
 object BIOAsyncZio extends BIOAsyncZio
 
 class BIOAsyncZio extends BIOAsync3[ZIO] with BIOLocal[ZIO] {
+  @inline override final def InnerF: BIOMonad3[ZIO] = this
+
+  @inline override final def unit: ZIO[Any, Nothing, Unit] = ZIO.unit
   @inline override final def pure[A](a: A): ZIO[Any, Nothing, A] = ZIOSucceedNow(a)
   @inline override final def sync[A](effect: => A): ZIO[Any, Nothing, A] = ZIO.effectTotal(effect)
   @inline override final def syncThrowable[A](effect: => A): ZIO[Any, Throwable, A] = ZIO.effect(effect)
@@ -133,8 +136,6 @@ class BIOAsyncZio extends BIOAsync3[ZIO] with BIOLocal[ZIO] {
   @inline override final def zipParLeft[R, E, A, B](fa: ZIO[R, E, A], fb: ZIO[R, E, B]): ZIO[R, E, A] = fa <& fb
   @inline override final def zipParRight[R, E, A, B](fa: ZIO[R, E, A], fb: ZIO[R, E, B]): ZIO[R, E, B] = fa &> fb
 
-  @inline override final val InnerF: BIOMonad3[ZIO] = this
-
   @inline override final def ask[R]: ZIO[R, Nothing, R] = ZIO.environment
   @inline override final def askWith[R, A](f: R => A): ZIO[R, Nothing, A] = ZIO.access(f)
 
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOForkMonix.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOForkMonix.scala
new file mode 100644
index 000000000..45c913cd2
--- /dev/null
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOForkMonix.scala
@@ -0,0 +1,12 @@
+package izumi.functional.bio.impl
+
+import izumi.functional.bio.{BIOFiber, BIOFork}
+import monix.bio.IO
+
+object BIOForkMonix extends BIOForkMonix
+
+class BIOForkMonix extends BIOFork[monix.bio.IO] {
+  override def fork[R, E, A](f: IO[E, A]): IO[Nothing, BIOFiber[IO, E, A]] = {
+    f.start.map(BIOFiber.fromMonix)
+  }
+}
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOForkZIO.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOForkZIO.scala
new file mode 100644
index 000000000..d0b5501ce
--- /dev/null
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/impl/BIOForkZIO.scala
@@ -0,0 +1,18 @@
+package izumi.functional.bio.impl
+
+import izumi.functional.bio.{BIOFiber3, BIOFork3}
+import zio.ZIO
+
+object BIOForkZIO extends BIOForkZIO
+
+class BIOForkZIO extends BIOFork3[ZIO] {
+  override def fork[R, E, A](f: ZIO[R, E, A]): ZIO[R, Nothing, BIOFiber3[ZIO, E, A]] = {
+    f
+      // FIXME: ZIO Bug / feature (interruption inheritance) breaks behavior in bracket/DIResource
+      //  unless wrapped in `interruptible`
+      //  see: https://github.com/zio/zio/issues/945
+      .interruptible
+      .forkDaemon
+      .map(BIOFiber3.fromZIO)
+  }
+}
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/syntax/BIO3Syntax.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/syntax/BIO3Syntax.scala
index 7ed3d7b4d..742c1589e 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/syntax/BIO3Syntax.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/syntax/BIO3Syntax.scala
@@ -244,6 +244,8 @@ object BIO3Syntax {
   trait BIO3ImplicitPuns2 extends BIO3ImplicitPuns3 {
     @inline implicit final def BIOParallel3[FR[-_, +_, +_]: BIOParallel3, R, E, A](self: FR[R, E, A]): BIO3Syntax.BIOParallel3Ops[FR, R, E, A] =
       new BIO3Syntax.BIOParallel3Ops[FR, R, E, A](self)
+    @inline implicit final def BIOParallel3[F[-_, +_, +_]: BIOMonad3, R, E, A](self: F[R, E, A]): BIO3Syntax.BIOMonad3Ops[F, R, E, A] =
+      new BIO3Syntax.BIOMonad3Ops[F, R, E, A](self)
     @inline final def BIOParallel3[FR[-_, +_, +_]: BIOParallel3]: BIOParallel3[FR] = implicitly
   }
   trait BIO3ImplicitPuns3 extends BIO3ImplicitPuns4 {
diff --git a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/syntax/BIOSyntax.scala b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/syntax/BIOSyntax.scala
index 9a4bcbd1e..59518ce80 100644
--- a/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/syntax/BIOSyntax.scala
+++ b/fundamentals/fundamentals-bio/src/main/scala/izumi/functional/bio/syntax/BIOSyntax.scala
@@ -190,6 +190,7 @@ object BIOSyntax {
   }
   trait BIOImplicitPuns2 extends BIOImplicitPuns3 {
     @inline implicit final def BIOParallel[F[+_, +_]: BIOParallel, E, A](self: F[E, A]): BIOSyntax.BIOParallelOps[F, E, A] = new BIOSyntax.BIOParallelOps[F, E, A](self)
+    @inline implicit final def BIOParallel[F[+_, +_]: BIOMonad, E, A](self: F[E, A]): BIOSyntax.BIOMonadOps[F, E, A] = new BIOSyntax.BIOMonadOps[F, E, A](self)
     @inline final def BIOParallel[F[+_, +_]: BIOParallel]: BIOParallel[F] = implicitly
   }
   trait BIOImplicitPuns3 extends BIOImplicitPuns4 {
diff --git a/project/project/PluginVersions.scala b/project/project/PluginVersions.scala
index 6c01cd0ac..cbcc2f3c3 100644
--- a/project/project/PluginVersions.scala
+++ b/project/project/PluginVersions.scala
@@ -1,5 +1,5 @@
 object PV {
-  val sbt_mdoc = "2.2.8"
+  val sbt_mdoc = "2.2.9"
   val sbt_paradox_material_theme = "0.6.0"
   val sbt_ghpages = "0.6.3"
   val sbt_site = "1.3.3"


Test patch:
diff --git a/distage/distage-extension-config/src/test/scala/izumi/distage/impl/OptionalDependencyTest.scala b/distage/distage-extension-config/src/test/scala/izumi/distage/impl/OptionalDependencyTest.scala
index 153949e7e..9a05fec46 100644
--- a/distage/distage-extension-config/src/test/scala/izumi/distage/impl/OptionalDependencyTest.scala
+++ b/distage/distage-extension-config/src/test/scala/izumi/distage/impl/OptionalDependencyTest.scala
@@ -5,7 +5,7 @@ import java.io.ByteArrayInputStream
 import distage.DIResource
 import izumi.distage.model.definition.ModuleDef
 import izumi.distage.model.effect.{DIEffect, LowPriorityDIEffectInstances}
-import izumi.functional.bio.{BIO, BIO3, BIOAsync, BIOMonad, BIOMonadAsk, BIOPrimitives, BIORef3, BIOTemporal, F}
+import izumi.functional.bio.{BIO, BIO3, BIOApplicative, BIOApplicativeError, BIOApplicativeError3, BIOArrow, BIOArrowChoice, BIOAsk, BIOAsync, BIOBifunctor, BIOBracket, BIOError, BIOFork, BIOFunctor, BIOGuarantee, BIOLocal, BIOMonad, BIOMonadAsk, BIOPanic, BIOParallel, BIOPrimitives, BIOProfunctor, BIORef3, BIOTemporal, BlockingIO, F}
 import izumi.fundamentals.platform.functional.{Identity, Identity2, Identity3}
 import org.scalatest.GivenWhenThen
 import org.scalatest.wordspec.AnyWordSpec
@@ -56,9 +56,11 @@ class OptionalDependencyTest extends AnyWordSpec with GivenWhenThen {
     And("DIEffect in DIEffect object resolve")
     assert(x[Identity] == 1)
 
-    type EitherFn[-R, +E, +A] = R => Either[E, A]
-    implicit val bioEitherFn: BIO3[EitherFn] = null
-    try threeTo2[EitherFn]
+    trait SomeBIO[+E, +A]
+
+    type SomeBIO3[-R, +E, +A] = R => SomeBIO[E, A]
+    implicit val BIO3SomeBIO3: BIO3[SomeBIO3] = null
+    try threeTo2[SomeBIO3]
     catch { case _: NullPointerException => }
 
     def threeTo2[FR[-_, +_, +_]](implicit FR: BIO3[FR]): FR[Any, Nothing, Unit] = {
@@ -68,22 +70,42 @@ class OptionalDependencyTest extends AnyWordSpec with GivenWhenThen {
 
     try DIEffect.fromBIO(null)
     catch { case _: NullPointerException => }
-    try BIO[Either, Unit](())(null)
+    try BIO[SomeBIO, Unit](())(null)
     catch { case _: NullPointerException => }
 
     And("Methods that mention cats/ZIO types directly cannot be referred")
 //    assertDoesNotCompile("DIEffect.fromBIO(BIO.BIOZio)")
 //    assertDoesNotCompile("DIResource.fromCats(null)")
 //    assertDoesNotCompile("DIResource.providerFromCats(null)(null)")
-    BIOAsync[Either](null)
+    BIOAsync[SomeBIO](null)
 
     DIResource.makePair(Some((1, Some(()))))
 
-    And("Can search for BIO/BIOAsync")
+    And("Can search for all hierarchy classes")
     def optSearch[A >: Null](implicit a: A = null) = a
-    optSearch[BIOTemporal[Either]]
-    optSearch[BIOAsync[Either]]
-    optSearch[BIO[Either]]
+    optSearch[BIOFunctor[SomeBIO]]
+    optSearch[BIOApplicative[SomeBIO]]
+    optSearch[BIOMonad[SomeBIO]]
+    optSearch[BIOBifunctor[SomeBIO]]
+    optSearch[BIOGuarantee[SomeBIO]]
+    optSearch[BIOApplicativeError[SomeBIO]]
+    optSearch[BIOError[SomeBIO]]
+    optSearch[BIOBracket[SomeBIO]]
+    optSearch[BIOPanic[SomeBIO]]
+    optSearch[BIOParallel[SomeBIO]]
+    optSearch[BIO[SomeBIO]]
+    optSearch[BIOAsync[SomeBIO]]
+    optSearch[BIOTemporal[SomeBIO]]
+    optSearch[BIOAsk[SomeBIO3]]
+    optSearch[BIOMonadAsk[SomeBIO3]]
+    optSearch[BIOProfunctor[SomeBIO3]]
+    optSearch[BIOArrow[SomeBIO3]]
+    optSearch[BIOArrowChoice[SomeBIO3]]
+    optSearch[BIOLocal[SomeBIO3]]
+
+    optSearch[BIOFork[SomeBIO]]
+    optSearch[BIOPrimitives[SomeBIO]]
+    optSearch[BlockingIO[SomeBIO]]
 
     And("`No More Orphans` type provider object is accessible")
     LowPriorityDIEffectInstances._Sync.hashCode()
diff --git a/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/BIOSyntaxTest.scala b/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/BIOSyntaxTest.scala
index eebb4b874..6037f725b 100644
--- a/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/BIOSyntaxTest.scala
+++ b/fundamentals/fundamentals-bio/src/test/scala/izumi/fundamentals/bio/test/BIOSyntaxTest.scala
@@ -1,14 +1,14 @@
 package izumi.fundamentals.bio.test
 
-import izumi.functional.bio.{BIO, BIOArrow, BIOAsk, BIOBifunctor3, BIOError, BIOFork, BIOFork3, BIOFunctor, BIOLocal, BIOMonad, BIOMonad3, BIOMonadAsk, BIOPrimitives, BIOPrimitives3, BIOProfunctor, BIOTemporal, BIOTemporal3, F}
 import monix.bio
 import org.scalatest.wordspec.AnyWordSpec
-import zio.Has
 
 import scala.concurrent.duration._
 
 class BIOSyntaxTest extends AnyWordSpec {
 
+  implicit val clock: zio.clock.Clock = zio.Has(zio.clock.Clock.Service.live)
+
   "BIOParallel.zipPar/zipParLeft/zipParRight/zipWithPar is callable" in {
     import izumi.functional.bio.BIOParallel
 
@@ -25,6 +25,7 @@ class BIOSyntaxTest extends AnyWordSpec {
 
   "BIOParallel3.zipPar/zipParLeft/zipParRight/zipWithPar is callable" in {
     import izumi.functional.bio.BIOParallel3
+
     def x[F[-_, +_, +_]: BIOParallel3](a: F[Any, Nothing, Unit], b: F[Any, Nothing, Unit]) = {
       a.zipPar(b)
       a.zipParLeft(b)
@@ -38,6 +39,7 @@ class BIOSyntaxTest extends AnyWordSpec {
 
   "BIOAsync.race is callable along with all BIOParallel syntax" in {
     import izumi.functional.bio.BIOAsync
+
     def x[F[+_, +_]: BIOAsync](a: F[Nothing, Unit], b: F[Nothing, Unit]) = {
       a zipPar b
       a zipParLeft b
@@ -67,6 +69,8 @@ class BIOSyntaxTest extends AnyWordSpec {
   }
 
   "BIO.apply is callable" in {
+    import izumi.functional.bio.BIO
+
     class X[F[+_, +_]: BIO] {
       def hello = BIO(println("hello world!"))
     }
@@ -76,6 +80,8 @@ class BIOSyntaxTest extends AnyWordSpec {
   }
 
   "BIO.widen/widenError is callable" in {
+    import izumi.functional.bio.{BIO, F}
+
     def x[F[+_, +_]: BIO]: F[Throwable, AnyVal] = {
       identity[F[Throwable, AnyVal]] {
         F.pure(None: Option[Int]).flatMap {
@@ -90,7 +96,7 @@ class BIOSyntaxTest extends AnyWordSpec {
   }
 
   "BIOBracket.bracketCase & guaranteeCase are callable" in {
-    import izumi.functional.bio.{BIOBracket, BIOExit}
+    import izumi.functional.bio.{BIOBracket, BIOExit, F}
 
     def x[F[+_, +_]: BIOBracket]: F[Throwable, Int] = {
       F.pure(None).bracketCase(release = {
@@ -128,6 +134,8 @@ class BIOSyntaxTest extends AnyWordSpec {
   }
 
   "BIO.when/unless/ifThenElse have nice inference" in {
+    import izumi.functional.bio.{BIOMonad, F}
+
     def x[F[+_, +_]: BIOMonad] = {
       F.ifThenElse(F.pure(false): F[RuntimeException, Boolean])(F.pure(()), F.pure(()): F[Throwable, Any]) *>
       F.when(F.pure(false): F[RuntimeException, Boolean])(F.pure(()): F[Throwable, Unit])
@@ -137,6 +145,8 @@ class BIOSyntaxTest extends AnyWordSpec {
   }
 
   "withFilter test" in {
+    import izumi.functional.bio.{BIOError, F}
+
     def x[F[+_, +_]: BIOError]: F[NoSuchElementException, Unit] = {
       assertDoesNotCompile(
         """
@@ -177,10 +187,12 @@ class BIOSyntaxTest extends AnyWordSpec {
   }
 
   "F / FR summoners examples" in {
+    import izumi.functional.bio.{BIOFork, BIOFork3, BIOFunctor, BIOMonad, BIOMonad3, BIOPrimitives, BIOPrimitives3, BIOTemporal, F}
+
     def x[F[+_, +_]: BIOMonad] = {
       F.when(false)(F.unit)
     }
-    def y[F[+_, +_]: BIOTemporal] = {
+    def y[F[+_, +_]: BIOTemporal: BIOFork] = {
       F.timeout(F.forever(F.unit))(5.seconds) *>
       F.map(z[F])(_ => ())
     }
@@ -200,7 +212,6 @@ class BIOSyntaxTest extends AnyWordSpec {
       F.mkRef(4).flatMap(r => r.update(_ + 5) *> r.get.map(_ - 1)).fork.flatMap(_.join)
     }
     lazy val zioTest = {
-      implicit val zioClock: zio.clock.Clock = Has(zio.clock.Clock.Service.live)
       (
         x[zio.IO],
         y[zio.IO],
@@ -220,6 +231,7 @@ class BIOSyntaxTest extends AnyWordSpec {
 
   "Support BIO syntax for ZIO with wildcard import" in {
     import izumi.functional.bio._
+
     zio.IO.effectTotal(List(4)).flatMap {
       F.traverse(_)(_ => zio.IO.unit)
     } *> F.unit
@@ -228,6 +240,8 @@ class BIOSyntaxTest extends AnyWordSpec {
   }
 
   "FR: Local/Ask summoners examples" in {
+    import izumi.functional.bio.{BIOArrow, BIOAsk, BIOBifunctor3, BIOLocal, BIOMonad3, BIOMonadAsk, BIOProfunctor, BIOTemporal3, F}
+
     def x[FR[-_, +_, +_]: BIOMonad3: BIOAsk] = {
       F.unit *> F.ask[Int].map {
         _: Int =>
@@ -312,13 +326,33 @@ class BIOSyntaxTest extends AnyWordSpec {
         }.toKleisli
       }.provide(4).flatMap(_ => F.unit).widenError[Throwable].leftMap(identity)
     }
-    def docExamples() = {
-      import izumi.functional.bio.{BIOMonad, BIOMonadAsk, BIOPrimitives, BIORef3, F}
 
+    lazy val _ = (
+      x[zio.ZIO],
+      onlyMonadAsk[zio.ZIO],
+      onlyMonadAskAccess[zio.ZIO],
+      onlyAsk[zio.ZIO],
+      y[zio.ZIO],
+      arrowAsk[zio.ZIO],
+      profunctorOnly[zio.ZIO],
+      biotemporalPlusLocal[zio.ZIO],
+      biomonadPlusLocal[zio.ZIO],
+      bifunctorOnly[zio.ZIO],
+    )
+  }
+
+  "doc examples" in {
+    locally {
+      import izumi.functional.bio.{BIOMonad, BIOPrimitives, F}
       def adder[F[+_, +_]: BIOMonad: BIOPrimitives](i: Int): F[Nothing, Int] =
         F.mkRef(0)
           .flatMap(ref => ref.update(_ + i) *> ref.get)
 
+      lazy val _ = adder[zio.IO](1)
+    }
+
+    locally {
+      import izumi.functional.bio.{BIOMonadAsk, BIORef3, F}
       // update ref from the environment and return result
       def adderEnv[F[-_, +_, +_]: BIOMonadAsk](i: Int): F[BIORef3[F, Int], Nothing, Int] =
         F.access {
@@ -328,24 +362,8 @@ class BIOSyntaxTest extends AnyWordSpec {
               res <- ref.get
             } yield res
         }
-      lazy val _ = (
-        adder[zio.IO](1),
-        adderEnv[zio.ZIO](1),
-      )
+
+      lazy val _ = adderEnv[zio.ZIO](1)
     }
-    implicit val clock: zio.clock.Clock = zio.Has(zio.clock.Clock.Service.live)
-    lazy val _ = (
-      x[zio.ZIO],
-      onlyMonadAsk[zio.ZIO],
-      onlyMonadAskAccess[zio.ZIO],
-      onlyAsk[zio.ZIO],
-      y[zio.ZIO],
-      arrowAsk[zio.ZIO],
-      profunctorOnly[zio.ZIO],
-      biotemporalPlusLocal[zio.ZIO],
-      biomonadPlusLocal[zio.ZIO],
-      bifunctorOnly[zio.ZIO],
-      docExamples(),
-    )
   }
 }