Error en los métodos de extensión al alinear

Quiero ampliar algunos tipos de sistemas y luego usarlos a través de la inserción

type System.String with  
    member this.foo n = this + "!" + n 

type System.Boolean with  
    member this.foo n = sprintf "%A!%A" this n 

Ahora llamo a estos métodos de extensión

let x = "foo".foo "bar"
let y = true.foo "bar"

que me da esto

- val x : System.String = "foobar"
- val y : string = "true!"bar""

Todo bien y elegante, pero ahora quiero terminar la llamada a.foo en una función en línea

let inline foo n v = (^T : (member foo : ^N  -> ^S) v, n)
let z = foo "bar" "baz" 

Solo ahora recibo un error del compilador que me dice que

> The type 'string' does not support the operator 'foo':

bueno ... lo hace!

¿Alguien puede explicar qué está pasando?

Respuestas a la pregunta(2)

Su respuesta a la pregunta