Type classes:
- Eq: Any objects that can be compared for equality
- Ord: Any objects that can be ordered
- Show: Any objects that can be shown as a string (most types bar functions) (show :: (Show a) => a -> String)
- Read: Any objects that can be shown as a string ( read :: (Read a) => String -> a)
- Enum: Any objects whose value can be enumerated (anything a/b you can use in [a..b]
- Bounded: Int, Char, Bool
- Num: Int, Integer, Float, Double
- Floating: Float, Double
- Integral: Int, Integer
Types can be instances of multiple type classes as some type classes cover subset of other type classes.