[Haskell-cafe] How to get a file path to the program invoked?

Erik Hesselink hesselink at gmail.com
Mon Dec 5 16:52:08 CET 2011


The operator </> is an alias for `combine`, which the documentation says:

  Combine two paths, if the second path isAbsolute, then it returns the second.

In this case, "/" is absolute, so it is returned.

If you wish to add a trailing path separator, use `addTrailingPathSeparator`.

Erik

On Mon, Dec 5, 2011 at 15:53, dokondr <dokondr at gmail.com> wrote:
> Balazs, thanks for your comments!
> The first comment works just fine.
> With </> operator I get this:
>
> Main System.Environment.Executable System.FilePath> "/abc" </> "/"
> "/"
>
> Instead of getting "/abc/" I get "/". What am I doing wrong?
>
> On Mon, Dec 5, 2011 at 6:03 PM, Balazs Komuves <bkomuves at gmail.com> wrote:
>>
>>
>> Two small comments:
>>
>> 1) This should work on Windows too, if you just leave out the word "Posix"
>> from the source:
>> import System.FilePath (splitFileName)
>>
>> 2) In general when dealing with paths, use the </> operator (from
>> System.FilePath)
>> instead of ++ "/" ++
>>
>> Balazs
>>
>>
>> On Mon, Dec 5, 2011 at 1:44 PM, dokondr <dokondr at gmail.com> wrote:
>>>
>>> This is how I finally solved this problem for POSIX complaint system:
>>>
>>> --
>>> -- TestRun
>>> --
>>> module Main where
>>> import System.Cmd (rawSystem)
>>> import System.Directory (getCurrentDirectory)
>>> import System.Environment.Executable (ScriptPath(..), getScriptPath)
>>> import System.FilePath.Posix (splitFileName)
>>>
>>> main = do
>>>
>>>   path <- getMyPath
>>>   putStrLn $ "myPath = " ++ path
>>>   let cmdLine = path ++ "args.sh"
>>>   rawSystem cmdLine  ["iphone", "test-twitts.txt"]
>>>
>>> {--
>>> data ScriptPath Source
>>>
>>> Constructors:
>>> Executable FilePath    it was (probably) a proper compiled executable
>>> RunGHC FilePath        it was a script run by runghc/runhaskell
>>> Interactive                     we are in GHCi
>>> --}
>>>
>>> getMyPath = do
>>>   curDir <- getCurrentDirectory -- from System.Directory
>>>   scriptPath  <- getScriptPath -- from System.Environment.Executable
>>>   let path = getMyPath' scriptPath curDir
>>>   return path
>>>
>>> getMyPath' (Executable path) _ = fst (splitFileName path)
>>> getMyPath' (RunGHC path) _  = fst (splitFileName path)
>>> getMyPath' Interactive curDir = curDir++"/"
>>>
>>>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>



More information about the Haskell-Cafe mailing list