haskell / filepath

Haskell FilePath core library
BSD 3-Clause "New" or "Revised" License
66 stars 32 forks source link

Use `/` as `pathSeparator` also on Windows #170

Open hasufell opened 1 year ago

hasufell commented 1 year ago

In GitLab by @andreasabel on Dec 8, 2022, 17:06

Windows supports / as path separator. (Apparently, since forever, which I didn't know, but this discussion even says DOS already accepted it: https://bytes.com/topic/python/answers/23123-when-did-windows-start-accepting-forward-slash-path-separator.)

Making pathSeparator uniformly '/' would increase the portability of Haskell CLI programs to Windows.
I think differentiating needlessly between OSs here is a hindrance to portability rather than an enabler of portability.

Here are examples where e.g. golden value testsuites break on Windows because of that non-uniformity of path separators:

Switching pathSeparator would of course be a major backwards-incompatibility, so there should be maybe a major-major version bump to 2.x. (If this issue is accepted, one could think about migration routes.)

hasufell commented 1 year ago

Switching pathSeparator would of course be a major backwards-incompatibility, so there should be maybe a major-major

/ is for compatibility. I'm not sure it's a good idea to make it the default. The potential breakage is almost impossible to foresee. Yes, the syscalls accept both variants, but user code may rely on the current behavior when dealing with internally constructed filepaths.

If you have golden tests, you can create different golden files per platform, e.g.: https://github.com/haskell/ghcup-hs/blob/823458910b41cf79739257dbc3d08084400bb594/test/GHCup/Types/JSONSpec.hs#L15-L21

hasufell commented 1 year ago

@andreasabel