Type classes allow us to define behavior on types.
As discussed in Chapter 3, Using High-Order Functions, type classes add an additional layer to our type system.
We accomplish this by:
- Defining behavior using Go interfaces (parent type class)
- Declaring a new type (base type class) to wrap base types
- Implementing behavior on our new type classes
Let’s look at our Equals type class implementation.
Parent class definition:
//4-purely-functional/ch11-monads/05_typeclasss/src/typeclass/equals.go
package typeclass
import (
"strconv"
)
type Equals interface {
Equals(Equals) bool
}
Equals is our parent type class. All base classes must implement the Equals method.