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
Sorry had to test it first: it seems you are right - you have to do the "?" for A yourself:
type A(arg : string option) = new (a) = new A(Some a) new () = new A(None) member __.Arg : string option = arg type B(?arg) = inherit A(arg)