github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/4-purely-functional/ch09-functor-monoid/11_monoid/main.go (about) 1 package main 2 3 import ( 4 "monoid" 5 "fmt" 6 ) 7 8 func main() { 9 10 const name = "Alice" 11 stringMonoid := monoid.WrapName(name) 12 fmt.Println("NameMonoid") 13 fmt.Println("Initial state:", stringMonoid) 14 fmt.Println("Zero:", stringMonoid.Zero()) 15 fmt.Println("1st application:", stringMonoid.Append(name)) 16 fmt.Println("Chain applications:", stringMonoid.Append(name).Append(name)) 17 18 ints := []int{1, 2, 3} 19 intMonoid := monoid.WrapInt(ints) 20 fmt.Println("\nIntMonoid") 21 fmt.Println("Initial state:", intMonoid) 22 fmt.Println("Zero:", intMonoid.Zero()) 23 fmt.Println("1st application:", intMonoid.Append(ints...)) 24 fmt.Println("Chain applications:", intMonoid.Append(ints...).Append(ints...)) 25 fmt.Println("Reduce chain:", intMonoid.Append(ints...).Append(ints...).Reduce()) 26 27 lineitems := []monoid.Lineitem{ 28 {1, 12978, 22330}, 29 {2, 530, 786}, 30 {5, 270, 507}, 31 } 32 lineitemMonoid := monoid.WrapLineitem(lineitems) 33 fmt.Println("\nLineItemMonoid") 34 fmt.Println("Initial state:", lineitemMonoid) 35 fmt.Println("Zero:", lineitemMonoid.Zero()) 36 fmt.Println("1st application:", lineitemMonoid.Append(lineitems...)) 37 fmt.Println("Chain applications:", lineitemMonoid.Append(lineitems...).Append(lineitems...)) 38 fmt.Println("Reduce chain:", lineitemMonoid.Append(lineitems...).Append(lineitems...).Reduce()) 39 }