I just learned that mutating func is just a curried func with first parameter as inout, so the code below will work and change `firstName` to `"John"`

```
struct Person {
    var firstName = "Matt"

    mutating func changeName(fn: String) {
        firstName = fn
    }
}
var p = Person() 
let changer = Person.changeName
changer(&p)("John")
p.firstName

```

but the odd thing happend when I add property observer to `p` like below, you can see `firstName` is still "Matt", why?
[![enter image description here](https://i.stack.imgur.com/uLchZ.png)](https://i.stack.imgur.com/uLchZ.png)