github.com/packtpublishing/learning-functional-programming-in-go@v0.0.0-20230130084745-8b849f6d58c4/Chapter09/wip/fpingo/lambda.go (about) 1 package main 2 3 import fmt "fmt" 4 5 type Stringy func() string 6 7 func foo() string{ 8 return "Stringy function" 9 } 10 11 func addTwo(x int) int { 12 return x + 2 13 } 14 15 func takesAFunction(foo Stringy){ 16 fmt.Printf("takesAFunction: %v\n", foo()) 17 } 18 19 func returnsAFunction()Stringy{ 20 return func()string{ 21 fmt.Printf("Inner stringy function\n"); 22 return "bar" // have to return a string to be stringy 23 } 24 } 25 26 func main(){ 27 takesAFunction(foo); 28 var f Stringy = returnsAFunction(); 29 f(); 30 var baz Stringy = func()string{ 31 return "anonymous stringy\n" 32 }; 33 fmt.Printf(baz()); 34 35 // f(x) = y 36 // 37 // https://imgur.com/r/linguistics/XBHub 38 // λx.x 39 // λx.x+2 40 // λx.x+2(5) 41 println(addTwo(5)) 42 println(func(x int) int { return x + 2 }(5)) 43 }