func doFuncApply(rift *lang.Rift, env collections.PersistentMap, funcApply *lang.FuncApply) interface{} { f := dereference(rift, env, funcApply.Ref()).(func([]interface{}) interface{}) args := funcApply.Args().Values() var argValues []interface{} for _, arg := range args { argValue := evaluate(rift, env, arg.(*lang.Node)) argValues = append(argValues, argValue) } returnValue := make(chan interface{}, 1) go func() { returnValue <- f(argValues) }() return <-returnValue }