How is it possible that I can access a non-static method defined in a type, assign it to a local variable and then pass an object of that type to that variable which returns a closure that I can then execute? Aka how does this work? I don’t understand what’s happening here.

Here’s a quick example in case my question isn’t clear enough:

```
struct Adder {
let base: Int
func add(value: Int) -> Int { base + value }
}
let adder = Adder(base: 3)
// adder: Adder
let addMethod = Adder.add
// addMethod: (Adder) -> (Int) -> Int
let magic = addMethod(adder)
// magic: (Int) -> Int
let sum = magic(2)
// sum: Int = 5
```