github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/4-purely-functional/ch11-category-theory/04_lambda/main.go (about) 1 package main 2 3 import "fmt" 4 5 func main() { 6 fmt.Println(compose(mul3, add1)(10)) 7 8 // fmt.Println(compose(mul3, func(n int) int { return n + 1 })(10)) 9 // fmt.Println(compose(func(n int) int { return n * 3 }, func(n int) int { return n + 1 })(10)) 10 11 fmt.Println(compose(mul3, func(x int) fii { return func(v int) int { return func(n int) int { return n + x }(v) } }(1))(10)) 12 13 fmt.Println(compose(func(n int) int { return func(z int) int { return n * 3 }(1234567) }, func(x int) fii { return func(v int) int { return func(n int) int { return n + x }(v) } }(1))(10)) 14 15 fmt.Println(func(f, g fii) fii { return func(n int) int { return f(g(n)) } }(func(n int) int { return func(z int) int { return n * 3 }(1234567) }, func(x int) fii { return func(v int) int { return func(n int) int { return n + x }(v) } }(1))(10)) 16 } 17 18 type fii func(int) int 19 20 func compose(f, g fii) fii { 21 return func(n int) int { return f(g(n)) } 22 } 23 24 var add1 = makeAdder(1) 25 26 func mul3(n int) int { 27 return func(z int) int { return n * 3 }(1234567) 28 } 29 30 func makeAdder(x int) fii { 31 return func(v int) int { return func(n int) int { return n + x }(v) } 32 }