On 23-Dec-2003, Sean L. Palmer <[EMAIL PROTECTED]> wrote: > It occurs to me that Haskell would be quite a bit easier for OO and > traditional programmers to grasp if Haskell would actually use the > correct, or at least more commonly used, names for things.
> For instance, > > data Maybe a = Nothing | Just a > > Maybe is a type constructor and Nothing and Just are data constructors. > > So it makes me wonder why the use of the data keyword... wouldn't it make more sense > to say: > > type Maybe a = Nothing | Just a > > ? I agree. That's one of the reasons why Mercury uses the word "type" rather than "data" when declaring discriminated union types. The corresponding declaration in Mercury is :- type maybe(A) ---> nothing ; just(A). > Likewise with class, type class, and instance: > > class Eq a where > (==) :: a -> a -> Bool > > That actually declares a type class, not a class. So why the use of > the keyword class? Is it done merely to confuse C++ and Java programmers? This is indeed potentially confusing for programmers familiar with C++/Java/C#/Ada/etc. In Mercury, we adopted Haskell-style type classes, using semantics very similar to those in Haskell. But we did adapt the syntax a bit. In particular, we use "typeclass" rather than "class" for type class declarations. So in Mercury, the corresponding declaration would look like this: :- typeclass eq(A) where [ func '=='(A, A) = bool ]. > The concept of type class in Haskell apparently roughly corresponds > to the concept of "interface" in Java. So why not call it interface? Haskell interfaces are really quite a bit more general than Java interfaces, particularly when you consider common extensions such as multi-parameter type classes, constructor classes, and functional dependencies. So I think it would not help to use the word "interface". -- Fergus Henderson <[EMAIL PROTECTED]> | "I have always known that the pursuit The University of Melbourne | of excellence is a lethal habit" WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp. _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell