[Haskell-cafe] Inheritance and Wrappers

Ozgur Akgun ozgurakgun at gmail.com
Tue Feb 1 13:45:34 CET 2011

OK, what about this as a use case then. I want to create a type class 'Term'
with only one function in it. The function returns a 'termTag' which labels
the *"kind"* of a value in a DSL.

class Term a where
   termTag :: a -> String

A user of this type-class can happily provide an instance without any other
type class requirement. However, I want those types which are instances of
Data to be an instance of Term automatically. On top of that, I don't want
to stop the user from creating a special instance for their data type.

I want to be able to write the following instance to accomplish that:

instance Data t => Term t where
    termTag = show . toConstr

And if the user wants to write a more specific instance, they should be
welcome to do so:

instance Term UserDT where
    termTag (...) = ...

I am not very much interested in the technical details about how things
currently are, I am more interested in a discussion about why (if?) this
would be considered a *design flaw*?


On 1 February 2011 12:18, Stephen Tetley <stephen.tetley at gmail.com> wrote:

> On 1 February 2011 11:47, Ozgur Akgun <ozgurakgun at gmail.com> wrote:
> >
> > So, is there a way to declare an AbGroup instance for the types with num
> > instances only?
> No - as Henning says its then no more useful than simply a function:
> add :: (Num u) => a -> a -> a
> add = (+)
> 'Overarching instances' i.e. classes with one implementation are a
> design flaw, not a virtue [*] so this hypothetical extension isn't
> welcome...
> {-# LANGUAGE OverarchingInstances #-}
> [*] Of course, there might be some valid cases for things in Oleg
> Kiselyov's typecast style, but modelling numericals doesn't look like
> one of them.
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

Ozgur Akgun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110201/5b6e09c4/attachment.htm>

More information about the Haskell-Cafe mailing list