[Haskell-beginners] overload a function

Brent Yorgey byorgey at seas.upenn.edu
Wed Mar 16 16:03:00 CET 2011


On Wed, Mar 16, 2011 at 10:27:52AM -0400, Britt Anderson wrote:
> I would like to have a function that can accept more than one input
> type and gives the same back as output. For the different eligible
> input types there would be different tests.
> An example of the idea would be something like:
> 
> test :: a -> Bool -> a
> 
> test 0 True = 0
> test False True = False
> .
> .
> .
> 
> is it obligatory that I create a typeclass for test and then instance
> each type that might go in the "a" slot? Because that seems like a lot
> of work.

In a polymorphic function, you are not allowed to do different things
depending on the type of a polymorphic input.  Partly this is just
theoretically elegant (see "parametricity" and "free theorems"), and
practically speaking it means that types can be *erased* at compile
time.  At run time there is no way to see what type something is
because all you have is a bunch of bits, with no type information!

The only way to have a polymorphic function which does something
different for different types is to use a type class.

-Brent



More information about the Beginners mailing list