github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/4-purely-functional/ch09-functor-monoid/11_monoid/src/monoid/name_monoid.go (about)

     1  package monoid
     2  
     3  type NameMonoid interface {
     4  	Append(s string) NameMonoid
     5  	Zero() string
     6  }
     7  
     8  func WrapName(s string) NameMonoid {
     9  	return nameContainer{name: s}
    10  }
    11  
    12  type nameContainer struct {
    13  	name string
    14  }
    15  
    16  func (s nameContainer) Append(name string) NameMonoid {
    17  	s.name = s.name + name
    18  	return s
    19  }
    20  
    21  func (nameContainer) Zero() string {
    22  	return ""
    23  }
    24  
    25  func (s nameContainer) String() string {
    26  	return s.name
    27  }