The following code does not compile.
type A(?arg) =
member __.Arg : string option = arg
type B(?arg) =
inherit A(arg) //ERROR expected type string but has t
F# will translate ?-marked arguments to optional values. Providing an argument gives a Some-value while not providing it gives a None-value. The combination of optional and named arguments lets you have huge flexibility.
See also my answer here https://stackoverflow.com/a/66043023/15143713 /JEE, Sharp#Soft