On 29/01/2013, at 12:43 PM, Bob Hutchison <hutch-li...@recursive.ca> wrote:

> 
> The immediate problem is mapping an input to the system, some json message 
> containing a reference to the 'thing' (like a key of some kind). I have to 
> take that reference and find the thing and operate on it. All operations are 
> easily accommodated by a type class. However, since I can't have a collection 
> with mixed types even if the types satisfy a type class, I can't quite see 
> how to actually store the things so I can find them.
> 
> So there are a couple of obvious ways to handle this.
> 
> I could use an ADT and a sum type of all the known kinds of thing, but I 
> already know that this has to be extended and that's going to be problematic 
> with users doing this on their own. And the type signatures look ugly. So I 
> think that's not the best.
> 
> I could use an ADT that contains functions that correspond to the functions 
> of the type class, and that close over the 'thing' in question. I think this 
> could be made to work, but I'm concerned with walking into more nasty 
> surprises…
> 

My advice is to go for the latter option. I'm not sure what nasty surprises you 
are expecting, but this "record of functions" approach is the one that I 
normally take when I am building a system that needs new types added without 
requiring global changes. I know that existentials and GADTs are possible 
solutions, but I've not needed the extra complexity here.

Cheers,

Tim
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to