const composeFields = <Fields extends S.Struct.Fields>(to: Fields) =>
<A extends S.Struct.Encoded<Fields>, I, R>(from: S.Schema<A, I, R>):
S.Schema<S.Struct.Type<Fields>, I, S.Struct.Context<Fields> | R> =>
S.compose(from, S.struct({ ...from.fields, ...to }))
const composeFields = <Fields extends S.Struct.Fields>(to: Fields) =>
<A extends S.Struct.Encoded<Fields>, I, R>(from: S.Schema<A, I, R>):
S.Schema<S.Struct.Type<Fields>, I, S.Struct.Context<Fields> | R> =>
S.compose(from, S.struct({ ...from.fields, ...to }))