Max,
class DatabaseEntry e where
entryLabel :: e -> String
formatEntry :: e -> String
compareEntries :: e -> e -> Ordering
Then I define
data Entry = forall a. (DatabaseEntry a) => Entry a
instance DatabaseEntry Entry where
entryLabel (Entry e) = entryLabel e
formatEntry (Entry e) = formatEntry e
How can I define compareEntries for this instance?
In general: you can't. The field of the Entry constructor has a
existentially quantified typed. Given two arbitrary values of type
Entry, this type may be instantiated with a different type for each
value, so you cannot easily compare the fields.
If you extend the DatabaseEntry class such that it supplies a method
that allows to produce some canonical representation for database
entries suited for comparison, then you could take that road.
Are you sure that your Entry type needs to be existentially quantified?
HTH,
Stefan
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe