
The Java type system is a lot less rich. You can take an object and call
methods on it, knowing only that it implements an interface. In Haskell,
you can do so much more. You don't even need an implementation, you can
rely on the type of the binding instead:
extremes :: Bounded b => Bool -> b
extremes lower = if lower then minBound else maxBound
-- e.g.
extremes True :: Int -- -9223372036854775808
data Foo = A | B | C | D deriving (Bounded, Show)
extremes False :: Foo -- D
Or (with a few language extensions), you can have the typeclass take
multiple arguments. In Java, you can't do anything like this:
class Convert a b where
convert :: a -> b
instance Show a => Convert a String where
convert = show
instance Convert Foo String where
convert A = "A"
convert B = "B"
convert C = "C"
convert D = "D"
Peter
On 31 January 2013 23:36, Mateusz Kowalczyk
Greetings,
I often wonder how one would explain type classes to someone coming from an environment such as Java. Whenever I think about type classes, I seem to think of them as Java interfaces. Bah, even the bottom of [1] states
Haskell classes are roughly similar to a Java interface. Like an interface declaration, a Haskell class declaration defines a protocol for using an object rather than defining an object itself.
Is there more to this `roughly similar' statement? Syntax is an obvious difference but beyond that, I can't think of anything I can do with a Haskell type class that I wouldn't be able to do with similar amount of effort with a Java interface, except for the fact that the interface would look absolutely disgusting syntax wise.
Any insight appreciated.
[1] - http://www.haskell.org/tutorial/classes.html
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners