Согласно спецификации, вы должны использовать длинную форму. Я не нашел никакого объяснения, почему это так, но грамматика для объявлений исключений выглядит следующим образом (и, возможно, также подсказывает, почему поведение такое, как вы описали):
исключение-определение: = атрибуты опция исключение тип-дела-объединение-данные
data-type-case-data: =
идент (случай с нулевым объединением)
идентификатор из тип * ... * тип (случай n -ного объединения)
выданный: uncurried-sig (случай n-арного объединения)
Это довольно интересно, потому что предполагает, что объявления исключений больше похожи на случаи дискриминационного объединения , чем на типы. Я думаю, вы можете подумать об объявлении исключения ...
exception MyExn of int
... как объявление, добавляющее новый регистр к стандартному типу System.Exception
(если это был дискриминированный союз). В этом случае вы не ожидаете, что сможете использовать параметр общего типа:
type System.Exception =
| ...
| MyExn of int