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

Reply via email to