FooService, it encounter specific errors such as BarError and BazError, which could be dependent on the specific implementation. From an interface perspective, it seems sensible to collapse these errors into a FooError (perhaps with semantics that are relevant to the FooService, e.g. FooValidationError or FooAuthError). In essence, FooService should only expose failure types that make sense, and not the implementation specifics.Data.TaggedError that contains a cause: { _tag: string } field which carries the underlying failure (useful for debug purposes) which seems broad enough to capture all underlying known failures. I've not been able to find a specific type that represents failures, other than that they are tagged..catch which maps to the services more generic error type:FooService to then catch on FooError tags, rather than the underlying implementation specific failure.