fork download
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "reflect"
  6. )
  7.  
  8. func curry( f interface{} ) func( interface{} ) func( interface{} ) interface{} {
  9. return func( a interface{} ) func( interface{} ) interface{} {
  10. return func( b interface{} ) interface{} {
  11. ff := reflect.ValueOf(f)
  12. va := reflect.ValueOf(a)
  13. vb := reflect.ValueOf(b)
  14. varg := [] reflect.Value { va, vb }
  15. return ff.Call( varg )[0].Interface()
  16. }
  17. }
  18. }
  19.  
  20. func main() {
  21. csum := curry( func( a int, b int ) int { return a + b } )
  22. add5 := csum( 5 )
  23. r := add5( 2 )
  24. fmt.Println( r.(int) )
  25. }
Success #stdin #stdout 0s 790016KB
stdin
Standard input is empty
stdout
7