[Haskell-cafe] File path programme
Keean Schupke
k.schupke at imperial.ac.uk
Thu Jan 27 04:24:47 EST 2005
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.
More information about the Haskell-Cafe
mailing list