ответ от 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")
Код требует, чтобы вы указали имя, но день рождения - это необязательный аргумент с некоторым значением по умолчанию.