Ben Rudiak-Gould wrote:
Several assumptions here... We might want more platforms than windows/unix. The separator for these systems is different (\ for windows / for unix - who knows what other obscure systems may use).
I'm tentatively opposed to (B), since I think that the only interesting difference between Win32 and Posix paths is in the set of starting points you can name. (The path separator isn't very interesting.) But maybe it does make sense to have separate starting-point ADTs for each operating system. Then of course there's the issue that Win32 edge labels are Unicode, while Posix edge labels are [Word8]. Hmm.
It seems to me a type class would allow the user to add definitions for their platform (IE it is extensible)... datatypes tend to be hard to extend as you have to find every use in the code
and modify it.
For code to be portable it has to use a diffenernt path parser depending on the platform, but
the code must not be different... One way of doing this would be to use a class...
data Windows data Unix
type System = Unix
class ParsePath a where
parsePath' :: a -> String -> Path instance ParsePath Windows where
parsePath' _ a = ... instance ParsePath Unix where
parsePath' _ a = ...If all paths can be expressed in a single type, it seems different path parsers and printers are required. All the other functions could operate on the standard datatype. This still leaves the
problem of determining what system you are compiling on... I guess I still don't see the problem with having:
#ifdef Unix
type System = Unix
#endif
#ifdef Windows
type System = Windows
#endifIn some library somewhere... Infact its the only way I can see of selecting the correct
instance at compile time... and using classes is the only way I can think of making the
system easily extensible (even if we use a single datatype for all paths)
Keean. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
