ответ от CMS определенно верный. Вот только одно дополнение, которое также может оказаться полезным. В F # вы часто хотите написать тип, просто используя неизменяемые свойства. При использовании синтаксиса «инициализатор объекта» свойства должны быть изменяемыми. Альтернативой в F # является использование именованных аргументов, что дает вам аналогичный синтаксис, но сохраняет неизменность:
type Person(name:string, ?birthDate) =
member x.Name = name
member x.BirthDate = defaultArg birthDate System.DateTime.MinValue
Теперь мы можем написать:
let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")
Код требует, чтобы вы указали имя, но день рождения - это необязательный аргумент с некоторым значением по умолчанию.