《Learn You a Haskell for Great Good》里面说：

A typeclass is a sort of interface that defines some behavior. If a type is a part of a typeclass, that means that it supports and implements the behavior the typeclass describes.

Scalaz说：

It provides purely functional data structures to complement those from the Scala standard library. It defines a set of foundational type classes (e.g. Functor, Monad) and corresponding instances for a large number of data structures.

#### Equal

Eq is used for types that support equality testing. The functions its members implement are == and /=.

Equal使用===,=/=以及assert_===而不是==等符号来判断。值得注意的是除了=/=以外，还有/==来判断，但是优先级不同。

#### Order

Ord is for types that have an ordering. Ord covers all the standard comparing functions such as >, <, >= and <=.

#### Enum

Enum members are sequentially ordered types — they can be enumerated. The main advantage of the Enum typeclass is that we can use its types in list ranges. They also have defined successors and predecessors, which you can get with the succ and pred functions.

Enum里面提供了诸如|=>等方法，利用实现的succpred函数生成EphemeralStream，看到Stream这个名字应该就明白这是一个lazy的数据结构。还提供了诸如fromfromStep,fromStepTo等函数来控制步长。

Enum的trait的定义中，发现

Enum继承自Order，所以现在的问题就是找一个Enum的实现。

#### Bounded

Bounded members have an upper and a lower bound.

Scalaz在Enum里面提供Bounded的功能，在实现Enum时提供maxmin函数。

Enum typeclass调用max或者min返回的是Option[T]

Members of Show can be presented as strings. Read is sort of the opposite typeclass of Show. The read function takes a string and returns a type which is a member of Read.

Scalaz提供Show但是没有提供Read