Let\'s say I defined in F# the following two types:
type Dog = { DogName:string; Age:int }
type Cat = { CatName:string; Age:int }
I was exp
You can define an inline
function with a member constraint, or go the classic route and use an interface (which would probably be preferred in this case).
let inline isOld (x:^T) = (^T : (member Age : int) x) >= 65
I just remembered this won't work for record types. Technically their members are fields, although you can amend them with members using with member ...
. You would have to do that to satisfy an interface anyway.
For reference, here's how you would implement an interface with a record type:
type IAging =
abstract Age : int
type Dog =
{ DogName : string
Age : int }
interface IAging with
member this.Age = //could also be `this.Age = this.Age`
let { DogName = _; Age = age } = this
age