Consider the example:
type Foo =
static member Foo(?x : int) = ()
decompile <@ Foo.Foo() @> // "Foo.Foo(None)"
decompile <@ Foo.Foo(x = 42) @> // "Foo.Foo(Some(42))"
decompile <@ Foo.Foo(?x = Some 42) @> // "Foo.Foo(Some(42))"
This does not produce valid F# in any of the cases.