Функция должна принимать параметр одного типа, который будет типом возвращаемого перечисления. Однако вам не нужно указывать тип, используя «поддельный» параметр, который нигде не используется в коде - вы можете указать фактический параметр типа при вызове функции, используя ту же запись, что и, например, при вызове defaultof<SomeType>
,
Следующая измененная функция принимает параметр одного типа, который встречается только в возвращаемом типе (чтобы избежать путаницы с форматтером кода SO, в коде я заменил 'на'):
> let parseEnum<´a> s = Enum.Parse(typeof<´a>,s) |> unbox<´a>;;
val parseEnum : string -> ´a
При вызове функции вам необходимо явно указать тип:
> parseEnum<FontStyle> "Bold";;
val it : FontStyle = Bold
Ваше решение было довольно близко к этому - единственное изменение заключается в том, что вы можете явно указать параметр типа вместо предоставления значения-свидетеля для управления выводом типа.