NB. Это именно то, что сказал Брайан, но, как мы надеемся, изложено более четко.
Я помню, как регистрировал ошибку именно по этой проблеме, и IIRC это то, что Дон Сайм сказал по этому вопросу.
Активный шаблон с несколькими случаями - это функция преобразования некоторого входного значения в одно из нескольких выходных значений. В вашем примере любой символ преобразуется в регистр Char или NoChar.
Преимущество этого заключается в том, что компилятор F # вызывает функцию с несколькими падежами активных шаблонов один раз и затем может в целом определить, какое правило сопоставления шаблонов следует оценить следующим.
Однако, если вы разрешите параметр, вам нужно будет оценить активный случай с несколькими падежами для каждого правила сопоставления с образцом.
Итак, представьте следующее
match input with
| Alpha "foo" -> ...
| Bravo "bar" -> ...
При оценке (| Alpha | Bravo |) «foo» возвращает «Bravo», тогда первое правило не будет совпадать. Likeways (| Alpha | Bravo |) «bar» возвращает «Alpha», тогда второе правило также не будет соответствовать. Таким образом, у вас нет активного шаблона с несколькими случаями. Просто парамтеризованный, частичный активный паттерн. (Потому что для некоторых входных данных ожидаемый шаблонный случай не будет достигнут.)
Так что, когда сталкиваешься с углом языка, который не имеет большого смысла, и на самом деле может быть намного понятнее с помощью частичного параметризованного активного шаблона. Функция не была добавлена к языку.