A simple, macro-less means of creating accessors from Services on members
returning a ZManaged. Extend the companion object with
ManagedAccessible[ServiceName], then simply call Companion(_.someMethod)
to return a ZManaged effect that requires the Service in its environment.
Example:
trait FooService {
def readSpellBook: UManaged[String]
def prepareWand: UManaged[Unit]
}
object FooService extends ManagedAccessible[FooService]
val example: ZManaged[Has[FooService], Nothing, String] =
for {
_ <- FooService(_.prepareWand)
spell <- FooService(_.readSpellBook)
} yield spell
- Companion:
- object