[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