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  }