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  }