Ben Rudiak-Gould wrote:


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.


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).

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
   #endif

In 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

Reply via email to