Workaround for 20 Argument Limit in `pipe` with Exhaustiveness Checking
Is there a way to get around the 20 argument
pipepipe limit when using a Match and still get exhaustiveness checking? I have some fairly sizeable enums that hit this limitimport { Match } from 'effect';
enum TestEnum {
value1 = 'value1',
value2 = 'value2',
value3 = 'value3',
value4 = 'value4',
value5 = 'value5',
value6 = 'value6',
value7 = 'value7',
value8 = 'value8',
value9 = 'value9',
value10 = 'value10',
value11 = 'value11',
value12 = 'value12',
value13 = 'value13',
value14 = 'value14',
value15 = 'value15',
value16 = 'value16',
value17 = 'value17',
value18 = 'value18',
value19 = 'value19',
value20 = 'value20',
}
// This will fail with TypeScript error TS2554: Expected 0-20 arguments, but got 21
const formatValue = (value: TestEnum): string =>
Match.value(value).pipe(
Match.when(TestEnum.value1, () => 'Value 1'),
Match.when(TestEnum.value2, () => 'Value 2'),
Match.when(TestEnum.value3, () => 'Value 3'),
Match.when(TestEnum.value4, () => 'Value 4'),
Match.when(TestEnum.value5, () => 'Value 5'),
Match.when(TestEnum.value6, () => 'Value 6'),
Match.when(TestEnum.value7, () => 'Value 7'),
Match.when(TestEnum.value8, () => 'Value 8'),
Match.when(TestEnum.value9, () => 'Value 9'),
Match.when(TestEnum.value10, () => 'Value 10'),
Match.when(TestEnum.value11, () => 'Value 11'),
Match.when(TestEnum.value12, () => 'Value 12'),
Match.when(TestEnum.value13, () => 'Value 13'),
Match.when(TestEnum.value14, () => 'Value 14'),
Match.when(TestEnum.value15, () => 'Value 15'),
Match.when(TestEnum.value16, () => 'Value 16'),
Match.when(TestEnum.value17, () => 'Value 17'),
Match.when(TestEnum.value18, () => 'Value 18'),
Match.when(TestEnum.value19, () => 'Value 19'),
Match.when(TestEnum.value20, () => 'Value 20'),
Match.exhaustive, // This becomes the 21st argument, causing the error
);import { Match } from 'effect';
enum TestEnum {
value1 = 'value1',
value2 = 'value2',
value3 = 'value3',
value4 = 'value4',
value5 = 'value5',
value6 = 'value6',
value7 = 'value7',
value8 = 'value8',
value9 = 'value9',
value10 = 'value10',
value11 = 'value11',
value12 = 'value12',
value13 = 'value13',
value14 = 'value14',
value15 = 'value15',
value16 = 'value16',
value17 = 'value17',
value18 = 'value18',
value19 = 'value19',
value20 = 'value20',
}
// This will fail with TypeScript error TS2554: Expected 0-20 arguments, but got 21
const formatValue = (value: TestEnum): string =>
Match.value(value).pipe(
Match.when(TestEnum.value1, () => 'Value 1'),
Match.when(TestEnum.value2, () => 'Value 2'),
Match.when(TestEnum.value3, () => 'Value 3'),
Match.when(TestEnum.value4, () => 'Value 4'),
Match.when(TestEnum.value5, () => 'Value 5'),
Match.when(TestEnum.value6, () => 'Value 6'),
Match.when(TestEnum.value7, () => 'Value 7'),
Match.when(TestEnum.value8, () => 'Value 8'),
Match.when(TestEnum.value9, () => 'Value 9'),
Match.when(TestEnum.value10, () => 'Value 10'),
Match.when(TestEnum.value11, () => 'Value 11'),
Match.when(TestEnum.value12, () => 'Value 12'),
Match.when(TestEnum.value13, () => 'Value 13'),
Match.when(TestEnum.value14, () => 'Value 14'),
Match.when(TestEnum.value15, () => 'Value 15'),
Match.when(TestEnum.value16, () => 'Value 16'),
Match.when(TestEnum.value17, () => 'Value 17'),
Match.when(TestEnum.value18, () => 'Value 18'),
Match.when(TestEnum.value19, () => 'Value 19'),
Match.when(TestEnum.value20, () => 'Value 20'),
Match.exhaustive, // This becomes the 21st argument, causing the error
);