
On 26 January 2005 14:30, Malcolm Wallace wrote:
Keean Schupke
writes: So let's define a new algebraic datatype something like:
I think you can guess what comming - why not use a class for extensibility: class Path p where ... The path class would provide all the operations for using paths...
Yup, good idea, and I think this would also allow David Roundy's suggestion of a FastString implementation of filepaths - it becomes just another instance.
This has the advantage that people can add instances for platforms without having to alter the code in the library...
Exactly. Yes.
Hmm, I deliberately didn't suggest using a type class. Do you really want to expose Win32 paths and POSIX paths, and whatever else, as different types? Maybe you do for extensibility, but you really want a single Path type too - otherwise portable code will have to use conditional compilation. The Path type therefore has to be an existential wrapper: data Path = (CPath p) => Path p Maybe we do want to do this, but it causes portability issues with the Path library itself: nhc98 can't compile this code for example - you can rewrite it using an explicit record of operations, as long as none of the operations are polymorphic... Cheers, Simon