I think you can avoid this `unsafePerformIO()` with

```
      val ioFuture = for {
        mbCached <- mbCachedIO
        result <- mbCached.map(_.pure[IO]) | requestedIO
      } yield result
```