You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: func_types[generated].go
    path of file: ./repos/expr/vm
    
    the code of the file until where you have to start completion: // Code generated by vm/func_types/main.go. DO NOT EDIT.


    
func (vm *VM) call(fn any, kind int) any {
	switch kind {
	case 1:
		return fn.(func() time.Duration)()
	case 2:
		return fn.(func() time.Month)()
	case 3:
		return fn.(func() time.Time)()
	case 4:
		return fn.(func() time.Weekday)()
	case 5:
		return fn.(func() []interface{})()
	case 6:
		return fn.(func() []uint8)()
	case 7:
		return fn.(func() interface{})()
	case 8:
		return fn.(func() bool)()
	case 9:
		return fn.(func() uint8)()
	case 10:
		return fn.(func() float32)()
	case 11:
		return fn.(func() float64)()
	case 12:
		return fn.(func() int)()
	case 13:
		return fn.(func() int16)()
	case 14:
		return fn.(func() int32)()
	case 15:
		return fn.(func() int64)()
	case 16:
		return fn.(func() int8)()
	case 17:
		return fn.(func() map[string]interface{})()
	case 18:
		return fn.(func() int32)()
	case 19:
		return fn.(func() string)()
	case 20:
		return fn.(func() uint)()
	case 21:
		return fn.(func() uint16)()
	case 22:
		return fn.(func() uint32)()
	case 23:
		return fn.(func() uint64)()
	case 24:
		return fn.(func() uint8)()
	case 25:
		arg1 := vm.pop().(time.Duration)
		return fn.(func(time.Duration) time.Duration)(arg1)
	case 26:
		arg1 := vm.pop().(time.Duration)
		return fn.(func(time.Duration) time.Time)(arg1)
	case 27:
		arg1 := vm.pop().(time.Time)
		return fn.(func(time.Time) time.Duration)(arg1)
	case 28:
		arg1 := vm.pop().(time.Time)
		return fn.(func(time.Time) bool)(arg1)
	case 29:
		arg1 := vm.pop().([]interface{})
		return fn.(func([]interface{}) []interface{})(arg1)
	case 30:
		arg1 := vm.pop().([]interface{})
		return fn.(func([]interface{}) interface{})(arg1)
	case 31:
		arg1 := vm.pop().([]interface{})
		return fn.(func([]interface{}) map[string]interface{})(arg1)
	case 32:
		arg2 := vm.pop().(string)
		arg1 := vm.pop().([]interface{})
		return fn.(func([]interface{}, string) string)(arg1, arg2)
	case 33:
		arg1 := vm.pop().([]uint8)
		return fn.(func([]uint8) string)(arg1)
	case 34:
		arg2 := vm.pop().(string)
		arg1 := vm.pop().([]string)
		return fn.(func([]string, string) string)(arg1, arg2)
	case 35:
		arg1 := vm.pop()
		return fn.(func(interface{}) []interface{})(arg1)
	case 36:
		arg1 := vm.pop()
		return fn.(func(interface{}) interface{})(arg1)
	case 37:
		arg1 := vm.pop()
		return fn.(func(interface{}) bool)(arg1)
	case 38:
		arg1 := vm.pop()
		return fn.(func(interface{}) float64)(arg1)
	case 39:
		arg1 := vm.pop()
		return fn.(func(interface{}) int)(arg1)
	case 40:
		arg1 := vm.pop()
		return fn.(func(interface{}) map[string]interface{})(arg1)
	case 41:
		arg1 := vm.pop()
		return fn.(func(interface{}) string)(arg1)
	case 42:
		arg2 := vm.pop()
		arg1 := vm.pop()
		return fn.(func(interface{}, interface{}) []interface{})(arg1, arg2)
	case 43:
		arg2 := vm.pop()
		arg1 := vm.pop()
		return fn.(func(interface{}, interface{}) interface{})(arg1, arg2)
	case 44:
		arg2 := vm.pop()
		arg1 := vm.pop()
		return fn.(func(interface{}, interface{}) bool)(arg1, arg2)
	case 45:
		arg2 := vm.pop()
		arg1 := vm.pop()
		return fn.(func(interface{}, interface{}) string)(arg1, arg2)
	case 46:
		arg1 := vm.pop().(bool)
		return fn.(func(bool) bool)(arg1)
	case 47:
		arg1 := vm.pop().(bool)
		return fn.(func(bool) float64)(arg1)
	case 48:
		arg1 := vm.pop().(bool)
		return fn.(func(bool) int)(arg1)
	case 49:
		arg1 := vm.pop().(bool)
		return fn.(func(bool) string)(arg1)
	case 50:
		arg2 := vm.pop().(bool)
		arg1 := vm.pop().(bool)
		return fn.(func(bool, bool) bool)(arg1, arg2)
	case 51:
		arg1 := vm.pop().(float32)
		return fn.(func(float32) float64)(arg1)
	case 52:
		arg1 := vm.pop().(float64)
		return fn.(func(float64) bool)(arg1)
	case 53:
		arg1 := vm.pop().(float64)
		return fn.(func(float64) float32)(arg1)
	case 54:
		arg1 := vm.pop().(float64)
		return fn.(func(float64) float64)(arg1)
	case 55:
		arg1 := vm.pop().(float64)
		return fn.(func(float64) int)(arg1)
	case 56:
		arg1 := vm.pop().(float64)
		return fn.(func(float64) string)(arg1)
	case 57:
		arg2 := vm.pop().(float64)
		arg1 := vm.pop().(float64)
		return fn.(func(float64, float64) bool)(arg1, arg2)
	case 58:
		arg1 := vm.pop().(int)
		return fn.(func(int) bool)(arg1)
	case 59:
		arg1 := vm.pop().(int)
		return fn.(func(int) float64)(arg1)
	case 60:
		arg1 := vm.pop().(int)
		return fn.(func(int) int)(arg1)
	case 61:
		arg1 := vm.pop().(int)
		return fn.(func(int) string)(arg1)
	case 62:
		arg2 := vm.pop().(int)
		arg1 := vm.pop().(int)
		return fn.(func(int, int) bool)(arg1, arg2)
	case 63:
		arg2 := vm.pop().(int)
		arg1 := vm.pop().(int)
		return fn.(func(int, int) int)(arg1, arg2)
	case 64:
		arg2 := vm.pop().(int)
		arg1 := vm.pop().(int)
		return fn.(func(int, int) string)(arg1, arg2)
	case 65:
		arg1 := vm.pop().(int16)
		return fn.(func(int16) int32)(arg1)
	case 66:
		arg1 := vm.pop().(int32)
		return fn.(func(int32) float64)(arg1)
	case 67:
		arg1 := vm.pop().(int32)
		return fn.(func(int32) int)(arg1)
	case 68:
		arg1 := vm.pop().(int32)
		return fn.(func(int32) int64)(arg1)
	case 69:
		arg1 := vm.pop().(int64)
		return fn.(func(int64) time.Time)(arg1)
	case 70:
		arg1 := vm.pop().(int8)
		return fn.(func(int8) int)(arg1)
	case 71:
		arg1 := vm.pop().(int8)
		return fn.(func(int8) int16)(arg1)
	case 72:
		arg1 := vm.pop().(string)
		return fn.(func(string) []uint8)(arg1)
	case 73:
		arg1 := vm.pop().(string)
		return fn.(func(string) []string)(arg1)
	case 74:
		arg1 := vm.pop().(string)
		return fn.(func(string) bool)(arg1)
	case 75:
		arg1 := vm.pop().(string)
		return fn.(func(string) float64)(arg1)
	case 76:
		arg1 := vm.pop().(string)
		return fn.(func(string) int)(arg1)
	case 77:
		arg1 := vm.pop().(string)
		return fn.(func(string) string)(arg1)
	case 78:
		arg2 := vm.pop().(uint8)
		arg1 := vm.pop().(string)
		return fn.(func(string, uint8) int)(arg1, arg2)
	case 79:
		arg2 := vm.pop().(int)
		arg1 := vm.pop().(string)
		return fn.(func(string, int) int)(arg1, arg2)
	case 80:
		arg2 := vm.pop().(int32)
		arg1 := vm.pop().(string)
		return fn.(func(string, int32) int)(arg1, arg2)
	case 81:
		arg2 := vm.pop().(string)
		arg1 := vm.pop().(string)
		return fn.(func(string, string) bool)(arg1, arg2)
	case 82:
		arg2 := vm.pop().(string)
		arg1 := vm.pop().(string)
		return fn.(func(string, string) string)(arg1, arg2)
	case 83:
		arg1 := vm.pop().(uint)
		return fn.(func(uint) float64)(arg1)
	case 84:
		arg1 := vm.pop().(uint)
		return fn.(func(uint) int)(arg1)
	case 85:
		arg1 := vm.pop().(uint)
		return fn.(func(uint) uint)(arg1)
	case 86:
		arg1 := vm.pop().(uint16)
		return fn.(func(uint16) uint)(arg1)
	case 87:
		arg1 := vm.pop().(uint32)
		return fn.(func(uint32) uint64)(arg1)
	case 88:
		arg1 := vm.pop().(uint64)
		return fn.(func(uint64) float64)(arg1)
	case 89:
		arg1 := vm.pop().(uint64)
		return fn.(func(uint64) int64)(arg1)
	case 90:
		arg1 := vm.pop().(uint8)
		return fn.(func(uint8) uint8)(arg1)

	}
	panic(fmt.Sprintf("unknown function kind (%v)", kind))
}