Ограничение типа F # для типа записи с определенным свойством
Я пытаюсь создать универсальную функцию, которая требует в качестве аргумента типа, что это тип записи, и что она имеет определенное свойство. Вот пример, который генерирует соответствующую ошибку компилятора:
let foo<'a> (a : 'a) =
a' = { a with bar = "baz" }
a'
Компиляция этого я получаю сообщение об ошибкеThe record label bar is not defined
.
Я попытался добавить следующее ограничение типа:
let foo<'a when 'a : (member Id : string)> =
// ...
но это тоже не скомпилировалоThis code is not sufficiently generic. The type variable ^a when ^a : (member get_Int : ^a -> string) could not be generalized because it would escape its scope.
Есть ли способ указать ограничение типа, которое позволило бы мне сделать это правильно?