From: skaller <sk...@us...> - 2004-05-06 11:03:34
|
On Thu, 2004-05-06 at 19:55, Nicolas Cannasse wrote: > > I'd like to reconsider the iteration semantics of Enums. > > So this is a thought experiment. > [...] > > Sorry I didn't have time recently to answer the private talks we had about > Enums specifications. > My thinking is the following : > Enum need more specification, but I want to keep them simple and unified. Then you must give up some of the capabilities and choose one of the coherent models. However, I think it is premature to make too many assumptions about how 'complex' an implementation technique is. > As > you told, the only "good" way to have several types of enum is to use > objects. Perhaps that is so, I'm not sure though. > I'm against it, simply because in stacked lazy operations such as > map or filter, method lookup and call overhead is simply to high for > something such as an enum. Yes, that is probably true, at least if we assume everything depends on atomic 'next' and 'get' methods. > I'm trying to think about a solution is > polymorphic variants in order to allow/restrict some operations on enums, > and still have one type as well as the type system compilation checks. Ok. However I'd like to emphasise again that this is only a thought experiment. I'd leave everything as it is at the moment and just try to think about which operations make sense under which conditions -- without worrying about how to represent those distinctions in Ocaml. > For example , an enum which have a count enum could be a : > > type 'a countable_enum = ([> 'Count ] ,'a) enum > > val count : countable_enum -> int > > (and so on...) > > However , I didn't experiment the idea in details yet. Good. I'm sure we can find a satisfactory technical solution. The problem now is more of a conceptual one. Just to demonstrate this: one solution is to simply use the existing interface and write specifications for which parts are usable with which kinds of iterators. This is a usage based protocol solution, which is the solution STL uses: the distinction between forward and input iterators is not enforced by the type system. The distinction is made just so you can say: IF you do "this" THEN this algorithm will do "that". -- John Skaller, mailto:sk...@us... voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net |