[Haskell-cafe] do we need types?

Miguel Mitrofanov miguelimo38 at yandex.ru
Fri Feb 26 08:23:52 EST 2010


I'd say we don't really need subclasses. I mean, what's the difference:

class Eq a where (==) :: a -> a -> Bool
instance Eq a => Eq (Maybe a) where
   Nothing == Nothing = True
   Just x == Just y = x == y
   _ == _ = False
sort :: Eq a => [a] -> [a]

or

data Eq a = Eq {eq :: a -> a -> Bool}
eqMaybe :: Eq a -> Eq (Maybe a)
eqMaybe e = Eq {eq = eqM} where
   eqM Nothing Nothing = True
   eqM (Just x) (Just y) = eq e x y
   eqM _ _ = False
sort :: Eq a -> [a] -> [a]

Replacing classes with types, we only lose one thing: the compiler won't deduce the right instances for us. I'll trade it for the ability to abstract over them. After all, we CAN deduce the right
instances by hand, it's just a finite amount of work (not very big, in my experience).

Pasqualino "Titto" Assini wrote:
> Hi, just a silly question (or maybe more than one):
> 
> 
> In Haskell we have data types (Integer,[a],...) as well as type
> classes (Num, Ord...).
> 
> But, if we have type classes do we still need types?
> 
> 
> Why shouldn't the objects that we process be defined only by their
> 'interfaces' (assuming that a type class is a kind of interface)?
> 
> 
> Maybe the real question is: are type classes a more primitive concept
> than data types?
> 
> And if so, in a language that had only type classes what would a data
> declaration like the following map to:
> 
> data List a = Cons a (List a) | Nil
> 
> And what about pattern matching? Would that still be possible, and
> what form would it take?
> 
> 
> And finally, would having only type classes make the type system any simpler?
> 
> 
> Thanks,
> 
>                          titto
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 



More information about the Haskell-Cafe mailing list