Haskell - 如果提供文件或使用stdin,如何打开文件

时间:2016-03-25 08:22:41

标签: haskell

我正在尝试打开文件,如果它存在或使用stdin代替。我想在hInFile上调用hGetContents。这就是我提出的,但不知道如何使其发挥作用。

main :: IO ()
main = do
    args <- getArgs
    let (inFileExists, inFile) = procArgs args
    if inFileExists 
        then hInFile <- openFile inFile ReadMode --this gives me parse error
        else let hInFile = stdin
    input' <- hGetContents hInFile
    print hInFile
    return ()

1 个答案:

答案 0 :(得分:4)

if是一个表达式,因此分支也必须是... <- ...let ... = ...不是的表达式。相反,我会做类似

的事情
hInFile <- if inFileExists 
           then openFile inFile ReadMode
           else return stdin

其中return stdin说&#34;只需给我回复stdin&#34;,但需要让所有类型都能正常运行。