The Future of Haskell discussion at the Haskell Workshop
Ketil Z. Malde
ketil@ii.uib.no
10 Sep 2003 14:27:33 +0200
Robert Ennals <Robert.Ennals@cl.cam.ac.uk> writes:
[Heavy snippage, hopefully preserving semantics]
> data Foo = Foo {wibble :: Int, wobble :: String}
> deriving Wibble
> We could imagine the definition of Foo being automatically desugared to the
> following:
> data Foo = Foo Int String
> instance Wibble Foo where
> wibble (x,_) = x
> wobbble (_,y) = y
> set_wibble x (_,y) = (x,y)
> set_wobble y (x,_) = (x,y)
Shouldn't that rather be:
class HasWibble a where
wibble :: a -> Int
set_wibble :: a -> Int -> a
class HasWobble a where ...
data Foo = Foo Int String
instance HasWibble Foo where
wibble (Foo x _) = x
set_wibble (Foo x y) z = Foo z y
instance HasWobble Fo where...
In order to let another record provide just a 'wibble' without a
'wobble'?
One danger of such an approach (implicit classes and instances) might
be non-intuitive error messages.
-kzm
--
If I haven't seen further, it is by standing in the footprints of giants