thanks for everyone's help -- it seems the simplest solution is to use the Typeable class, existential types and type-safe cast.
Cheers, Dave On Sun, Jul 6, 2008 at 9:18 PM, Don Stewart <[EMAIL PROTECTED]> wrote: > princedpw: >> Hi all, >> >> SML conveniently contains the type "exn" which is an instance of an >> "extensible data type". In other words, unlike normal data types that >> are "closed" (can't admit new constructors once defined), SML's exn >> type is "open," allowing programmers to keep adding new alternatives >> as often as they choose. Like normal datatypes, the elimination form >> for an extensible data type is a case statement (or match function). >> >> Friends have told me that Haskell doesn't have extensible data types. >> However, it seems fairly straightforward to code them up using type >> classes....though the solution I'm thinking of has a little bit of >> boilerplate I'd like to scrap (you have to define a new type >> declaration *and* an instance of a type class with a "match" method) >> and matching occurs through a string comparison (which can lead to >> silly programmer errors if there is accidentally a typo in the >> string). > > You should probably use Typeable here, for the type matching, rather > than a custom matcher. class Typeable a => Extensible a, this leads to a > fairly straighforward extensible data type, where the open instance > definition lets you add variants on the fly. > >> Anyway, it's possible with some thought I could come up with a better >> solution, but before worrying about it, I figured I'd ask if anybody >> else already has a package that does this. It seems like a pretty >> natural feature to want to have. > > There's a number of ways to do this, including fully statically via type > classes and existential types, or via the Dynamic type. > > Googling for "expression problem Haskell" will turn up some things. Some > implementions of open data types in use can be found in xmonad, and the > extensible exceptions proposal here, > > > http://209.85.173.104/search?q=cache:xeXhle5KAqkJ:www.haskell.org/~simonmar/papers/ext-exceptions.pdf > > -- Don > _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
