У меня есть следующий универсальный c тип варианта:
type 'a t = A | B | C | D | E | Value of 'a
и некоторая функция, которая преобразует int t
в string t
let int_to_sting = function
| Value x -> Value (string_of_int x)
| some -> some
Эта функция не компилируется из-за
| some -> some
Ошибка: это выражение имеет тип int t, но ожидалось выражение типа string t
Тип int несовместим
Даже если оно имеет Тип аннотации.
let int_to_sting : int t -> string t = function
| Value x -> Value (string_of_int x)
| some -> some
Я могу переписать его с
let int_to_sting = function
| Value x -> Value (string_of_int x)
| A -> A
| B -> B
| C -> C
| D -> D
| E -> E
Но длинный список конструкторов выглядит избыточно. Можно ли преобразовать some
в моей первой реализации, чтобы избежать этого шумного кода?