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