[Haskell-cafe] "data" and classes question

Bulat Ziganshin bulat.ziganshin at gmail.com
Tue Jan 29 11:52:32 EST 2008


Hello Chaim,

Tuesday, January 29, 2008, 7:26:25 PM, you wrote:

your approach is completely wrong (OOP-inspired, but haskell isn't OOP
language). type class is common interface to different types. just for
example:

data BinState = On | Off
data BinChange = OnToOff | OffToOn

class MinValue a where
  minvalue :: a
instance MinValue BinState where
  minvalue = On
instance MinValue BinChange where
  minvalue = OnToOff

here we define class with a function (class without functions hardly
can be used for anything useful) and provide implementation of this
function for different types. then, we can use it in any code:

main = print (minValue :: BinChange)

and in particular we can declare derived class. the advantage of
derived class is that it can use all functions of base class. but it
should add its own functions too, otherwise it will be again useless:

class (MinValue a) => BoundedValue a where
  maxvalue :: a
instance MinValue BinState where
  maxvalue = Off
instance MinValue BinChange where
  maxvalue = OffToOn

now, for values in BoundedValue class you can use both functions.
also, you can use functions from MinValue class in default
definitions of BoundedValue functions

but if you just need to use functions from MinValue class, you don't
need to declare one more class

type classes can be compared with Java interfaces. they aren't 100%
equal, though. read http://haskell.org/haskellwiki/OOP_vs_type_classes
and especially its "further reading" section

-- 
Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com



More information about the Haskell-Cafe mailing list