Я пишу функцию на Haskell как часть компилятора, чтобы открыть файл, прочитать из него набор имен файлов и объединить их в строку. Код отлично работает в ghci, но дает сбой при компиляции со следующим:
fact.fn: openFile: не существует (Нет такого файла или каталога)
Я полностью уверен, что fact.fn существует и находится в том же каталоге, что и исполняемый файл.
Соответствующий код:
compile [fileName] = do
(ilude, contents) <- imports fileName
let lude = "prelude.fn" : ilude
prld <- fmap fullPrelude (mapM readFile lude) --seems to fail here,
--but works fine in the interpreter
let newPrld = unlines [prld, "\nend"]
runEvalWith HappyParser.parseExpr fileName contents newPrld
imports :: String -> IO ([String], String)
imports fileName = do
contents <- readFile fileName
let ls = lines contents
let ifile = filter (isPrefixOf "import") ls {-find import string here-}
let contentList = filter (\w -> w `notElem` ifile) ls
let impts = mapMaybe (stripPrefix "import") ifile
return (impts, (unlines contentList) )
fullPrelude :: [String] -> String
fullPrelude [] = ""
fullPrelude xs = unlines( map (procPrelude) xs)
procPrelude :: String -> String
procPrelude pld = unlines(init(words pld))
pwd
и добавляет к нему имя файла. - person Willem Van Onsem   schedule 09.09.2018pwd
предопределен как псевдоним дляGet-Location
, который возвращает текущее местоположение. На CMDpwd
недоступен, для получения текущего каталога запускаемcd
(без аргументов). - person Mor A.   schedule 09.09.2018