Add .travis.yml to test compilation with older GHCs
[packages/filepath.git] / readme.txt
1 System.FilePath
2 ===============
3
4 I have written a System.FilePath module in part based on the one in
5 Yhc, and in part based on the one in Cabal (thanks to Lemmih). The aim
6 is to try and get this module into the base package, as FilePath's are
7 something many programs use, but its all too easy to hack up a little
8 function that gets it right most of the time on most platforms, and
9 there lies a source of bugs.
10
11 This module is Posix (Linux) and Windows capable - just import
12 System.FilePath and it will pick the right one. Of course, if you
13 demand Windows paths on all OS's, then System.FilePath.Windows will
14 give you that (same with Posix). Written in Haskell 98 + Heirarchical
15 Modules.
16
17 Haddock: http://www-users.cs.york.ac.uk/~ndm/projects/filepath/System-FilePath.html
18 Darcs: darcs get http://www.cs.york.ac.uk/fp/darcs/filepath
19 Source: http://www.cs.york.ac.uk/fp/darcs/filepath/System/FilePath.hs
20 Homepage: http://www-users.cs.york.ac.uk/~ndm/projects/libraries.php
21
22 If you go to the haddock page there are a few little examples at the
23 top of the file.
24
25
26 Acknowledgements
27 ----------------
28
29 Thanks to Marc Webber, shapr, David House, Lemmih, others...
30
31
32 Competitors
33 -----------
34
35 System.FilePath from Cabal, by Lemmih
36 FilePath.hs and NameManip.hs from MissingH
37
38 The one from Cabal and FilePath.hs in MissingH are both very similar, I
39 stole lots of good ideas from those two.
40
41 NameManip seems to be more unix specific, but all functions in that module
42 have equivalents in this new System.FilePath module.
43
44 Hopefully this new module can be used without noticing any lost functions,
45 and certainly adds new features/functions to the table.
46
47
48 Should FilePath by an abstract data type?
49 -----------------------------------------
50
51 The answer for this library is no. This is a deliberate design decision.
52
53 In Haskell 98 the definition is 'type FilePath = String', and all functions
54 operating on FilePath's, i.e. readFile/writeFile etc take FilePath's. The
55 only way to introduce an abstract type is to provide wrappers for these
56 functions or casts between String's and FilePathAbstract's.
57
58 There are also additional questions as to what constitutes a FilePath, and
59 what is just a pure String. For example, "/path/file.ext" is a FilePath. Is
60 "/" ? "/path" ? "path" ? "file.ext" ? ".ext" ? "file" ?
61
62 With that being accepted, it should be trivial to write
63 System.FilePath.ByteString which has the same interface as System.FilePath
64 yet operates on ByteString's.