package main
import "fmt"
type intSlice []int
func (i intSlice) collect(block func(i int) int) intSlice {
r := make(intSlice, len(i))
for j, v := range i {
r[j] = block(v)
}
return r
}
func main() {
numbers := intSlice{1, 2, 3}
squared := func(i int) int { return i * i }
fmt.Printf("%v", numbers.collect(squared))
}
Implementations of select,inject,detect are left as an excercise for the reader.