Idea:
Any abstraction must be learned. Therefore the goal should be to implement as few abstractions as possible. One idea to prevent the "execute" function abstraction could be to define interfaces which make the services compatible with the FX pipe conventions. This maybe can be in the form of a Service type
@Injectable()
export class MyService implements FxService {}
or by defining each of the functions individually
@Injectable()
export class MyService {
loadEntities<A, T>(): FxOutput<T> {
// this.http....
}
}