ServiceA, ServiceB and ServiceC and all of them are able to say hello() but ServiceB also has an additional method bark() hello() based on an id/tag that I want to use to pick the corresponding service from my context. Context.Tag . But I can't get the former to work with Effect.Service unless I specify the whole return type upfront and therefore lose any type inference, and the latter limits the implementation to exactly what's being defined by the Tag.