package parallel import ( "sync" ) func Parallel[T any, R any](fn func(T) R, args ...T) []R { var wg sync.WaitGroup results := make([]R, len(args)) for i, v := range args { wg.Add(1) go func(i int, v T) { defer wg.Done() results[i] = fn(v) }(i, v) } wg.Wait() return results }