package main

import "github.com/davecgh/go-spew/spew"

type Cruncher func(int) int

func mul(n int) int {
	return n * 2
}

func add(n int) int {
	return n + 100
}

func sub(n int) int {
	return n - 1
}

func crunch(nums []int, a ...Cruncher) (rnums []int) {
	rnums = append(rnums, nums...)
	for _, f := range a {
		for i, n := range rnums {
			rnums[i] = f(n)
		}
	}
	return
}

func main() {
	nums := []int{1, 2, 3, 4, 5, 6}
	spew.Dump(crunch(nums, mul, add, sub))
}