Opaque types cannot refer to each other and are closed to aliasing, instead use non-opaque types.