В вашем примере, A
это регистр объединения, который является значением, не тип. Но содержание каждого случая требует типа, поэтому код не имеет смысла. По той же причине вы не можете создать функцию, которая принимает значение типа A
, потому что это не тип. Давайте исправим это.
Предположим, что случай A
содержал некоторые данные (A of int list list
). Вы можете использовать псевдоним типа, чтобы дать короткое или значимое имя для int list list
. И затем вы можете повторно использовать имя типа в другом месте:
type A = int list list
type First =
| A of A
| B
type Second =
| C of First
| D of A
Теперь вы также можете написать функцию, которая принимает значение типа A
.
Это довольно распространенная практика для создания случай, который имеет то же имя, что и тип, который он содержит (например, A of A
). Просто проясните разницу между регистром A
и типом A
.