do 块中的解析错误

Parse errors in do-blocks

当我尝试将以下代码加载到 ghci 时

import System.Environment (getArgs)
import System.IO

interactWith function inputFile outputFile = do
  input <- readFile inputFile

writeFile outputFile (function input)
main = mainWith myFunction
  where mainWith function = do
    args <- getArgs
    case args of
    [input,output] -> interactWith function input output
    _ -> putStrLn "error: exactly two arguments needed"
                                                             
myFunction = id

它产生 error: parse error on input ‘args’。但是我不清楚是什么产生了问题,我无法通过查看解析错误问题的答案来判断问题是什么。

为什么会产生错误?

您需要修复程序的缩进。 do 块下的项目应比 where 子句中定义的开头至少向右缩进一列。您还应该缩进 case … of 子句下的大小写:

import System.Environment (getArgs)
import System.IO

interactWith function inputFile outputFile = do
    input <- readFile inputFile
    writeFile outputFile (function input)

main = mainWith myFunction
  where mainWith function = do
            args <- getArgs
            case args of
                [input,output] -> interactWith function input output
                _ -> putStrLn "error: exactly two arguments needed"
                                                             
myFunction = id