Да, если кто-то хочет указать файл в качестве аргумента, он должен получить аргументы и отправить их в openFile.
System.Environment.getArgs
возвращает аргументы в виде списка. Итак, учитывая test_getArgs.hs
как
import System.Environment (getArgs)
main = do
args <- getArgs
print args
Тогда
$ ghc test_getArgs.hs -o test_getArgs
$ ./test_getArgs
[]
$ ./test_getArgs arg1 arg2 "arg with space"
["arg1","arg2","arg with space"]
Итак, если вы хотите прочитать один файл:
import System.Environment (getArgs)
import System.IO (openFile, ReadMode, hGetContents)
main = do
args <- getArgs
file <- openFile (head args) ReadMode
text <- hGetContents file
-- do stuff with `text`
(Обратите внимание, что в коде нет восстановления после ошибок: что делать, если не было аргументов, и поэтому args
был пуст (head
потерпит неудачу)? Что если файл не существует / не читается?)