Extending our currying example

But wait, there's more! Let's add the following, just above func main():

func (f numberIs) apply(s ...int) (ret []bool) {
for _, i := range s {
ret = append(ret, f(i))
}
return ret
}

The apply function is a method bound to a function type, namely numberIs. Our apply function applies the numberIs function to each argument. Each calculated value is appended to the newly created array of bools that is then returned to the caller.

Next, we update main() as follows:

func main() {
fmt.Println("NonCurried - lessThan(1,2):", lessThan(1,2))
fmt.Println("Curried - LessThanTwo(1):", lessThanTwo(1))
// use anonymous function
isLessThanOne := numberIs(func(i int) bool { return i < 1 }).apply
isLessThanTwo := numberIs(lessThanTwo).apply // use named function
s := []int{0, 1, 2}
fmt.Println("Curried, given:", s, "...")
fmt.Println("isLessThanOne:", isLessThanOne(s...))
fmt.Println("isLessThanTwo:", isLessThanTwo(s...))
}

Here's the output of this:

NonCurried - lessThan(1,2): true
Curried - LessThanTwo(1): true
Curried, given: [0 1 2]...
isLessThanOne: [true false false]
isLessThanTwo: [true true false]

In pure FP, every function is a function of one argument. We can use currying in Go to achieve this.

Now, back to cars.