github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/4-purely-functional/ch09-functor-monoid/11_monoid/src/monoid/int_monoid.go (about) 1 package monoid 2 3 type IntMonoid interface { 4 Zero() []int 5 Append(i ...int) IntMonoid 6 Reduce() int 7 } 8 9 func WrapInt(ints []int) IntMonoid { 10 return intContainer{ints: ints} 11 } 12 13 type intContainer struct { 14 ints []int 15 } 16 17 func (intContainer) Zero() []int { 18 return nil 19 } 20 21 func (i intContainer) Append(ints ...int) IntMonoid { 22 i.ints = append(i.ints, ints...) 23 return i 24 } 25 26 func (i intContainer) Reduce() int { 27 total := 0 28 for _, item := range i.ints { 29 total += item 30 } 31 return total 32 } 33