คำตอบจาก CMS ถูกต้องแน่นอน นี่เป็นเพียงส่วนเพิ่มเติมเดียวที่อาจเป็นประโยชน์ ใน F # คุณมักต้องการเขียนประเภทโดยใช้คุณสมบัติที่ไม่เปลี่ยนรูป เมื่อใช้ไวยากรณ์ "object initializer" คุณสมบัติจะต้องเปลี่ยนแปลงได้ อีกทางเลือกหนึ่งใน 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")
รหัสกำหนดให้คุณต้องระบุชื่อ แต่วันเกิดเป็นอาร์กิวเมนต์ทางเลือกที่มีค่าเริ่มต้นบางค่า