Cover by Oliver Sturm

Safari, the world’s most comprehensive technology and business learning platform.

Find the exact information you need to solve a problem on the fly, or go deeper to master the technologies and skills you need to succeed

Start Free Trial

No credit card required

O'Reilly logo

WHAT’S IN A TYPECLASS?

Monads are an advanced abstraction mechanism, and the abstraction in Haskell is based on the idea of typeclasses (typeclasses, not type classes). Typeclasses are an abstraction that C# and many other object oriented languages don’t have. Look at the following examples to understand what they do.

Say you have your own data type — a discriminated union in Haskell, very similar to an enum in .NET:

data Food = Pasta | Pizza | Chips

You also have a function that can check whether two given values of type Food are considered equal:

isEqualFood :: Food -> Food -> Bool

isEqualFood Pasta Pasta = True

isEqualFood Pizza Pizza = True

isEqualFood Chips Chips = True

isEqualFood _ _ = False

The variations of the function declare the three special cases explicitly in which the two given parameters are the same — in these cases the result is True. In all other cases, denoted by the use of the wildcard operator _, the result is False.

Using the function on a Haskell console at this stage would render these results:

Main> isEqualFood Pizza Chips

False

Main> isEqualFood Pizza Pizza

True

Main>

Of course, a check for equality of two values is something you want to be able to do with most data types. In other words, there is a group, a class of types, for which comparing for equality makes sense. In Haskell, a typeclass can be used to describe that class of types. Here’s how a typeclass for the purpose of equality comparison could be written:

class MyEq a where

  isEqual ...

Find the exact information you need to solve a problem on the fly, or go deeper to master the technologies and skills you need to succeed

Start Free Trial

No credit card required