A decorator wraps a StreamHandle and returns an enhanced handle
with additional capabilities C (e.g. Seekable). When C is
known at the call site (the common case - a specific decorator is applied
directly), consumers get static typing with no runtime capability check
needed. Where a handle arrives already decorated by unknown/dynamic
decorators, use the capability is* type guards instead.
A decorator wraps a StreamHandle and returns an enhanced handle with additional capabilities
C(e.g. Seekable). WhenCis known at the call site (the common case - a specific decorator is applied directly), consumers get static typing with no runtime capability check needed. Where a handle arrives already decorated by unknown/dynamic decorators, use the capabilityis*type guards instead.