@typed/io
Version:
Runtime IO type system
15 lines • 654 B
JavaScript
import { combine } from '@typed/effects';
import { toString } from '@typed/strings';
import { Array } from './Array';
import { DecodeError, decodeFailure } from './Decoder';
import { refinement } from './refinement';
export const tuple = (decoders) => {
const expected = `[${decoders.map((d) => d.expected).join(`, `)}]`;
return refinement(Array, function* (list) {
if (list.length !== decoders.length) {
return yield* decodeFailure(DecodeError.create(expected, `${toString(list)}`));
}
return yield* combine(...decoders.map((d, i) => d.decode(list[i])));
}, expected);
};
//# sourceMappingURL=Tuple.js.map