UP | HOME

Deriving

1. Deriving

What the cool thing that Deriving does is actually automaticlly implementing instance for particular type class.

For instance, a Person derives Eq

data Person = Person
│ { firstName :: String
│ , lastName  :: String
│ , age       :: Int
│ }
│ deriving Eq

Then we are able to compare two Persons because Haskell make the type Person to be a instance of typeclass Eq.

Take another example,

data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
│   │   │  deriving (Bounded, Enum)

The Bounded typeclass defines things that have lowest possible value and highest possible value. The Enum typeclass defines things that have predecessors and successors.

Let’s read one of function in Bounded typeclass minBound, which just return something that is instance of Bounded.

minBound :: (Bounded a) => a

Hence, if enforce its return type to be Day, we will get result

ghci> minBound :: Day
Monday

Take a look at one function of Enum typeclass

succ :: (Enum a) => a -> a

We could easy guess the result of succ Tuesday will be Wednesday.

2. Further study

  • How does the Deriving being implemented in Haskell?

Thanks a guy point me I could go further by study Data.Derive at the beginner mailing session.

3. Reference