do块内的Haskell分析错误

do块内的Haskell分析错误,haskell,indentation,Haskell,Indentation,我得到以下错误 对输入“args”的分析错误 。。。在尝试编译以下代码时: import System.Environment (getArgs) interactWith function inputFile outputFile = do input <- readFile inputFile writeFile outputFile (function input) main = mainWith myFunction where mainWith

我得到以下错误

对输入“args”的分析错误

。。。在尝试编译以下代码时:

import System.Environment (getArgs)

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"

        -- replace "id" with the name of our function below 
        myFunction = id
导入系统环境(getArgs)
与函数inputFile outputFile=do交互
input putStrLn“错误:需要两个参数”
--用下面函数的名称替换“id”
myFunction=id

代码取自真实世界哈斯克尔的第4章。

问题在于缩进。在这本书中,我无法正确地解释缩进。 代码应如下所示:

import System.Environment (getArgs)

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"

        -- replace "id" with the name of our function below 
        myFunction = id
导入系统环境(getArgs)
与函数inputFile outputFile=do交互
input putStrLn“错误:需要两个参数”
--用下面函数的名称替换“id”
myFunction=id

我在学习Haskell时遇到的一个更大的问题是模糊的编译错误。

问题代码中的缩进是正确的。 您可能在代码中加入了一个。有很多方法可以强制编辑器将每个选项卡替换为4个空格