Haskell I/O:putStrLn应用于两个参数

4
当我尝试编译下面的代码清单时:
import System.Environment(getArgs)
import System.Exit
import Control.Monad(when)
main = do 
    args <- getArgs
    when (length args /= 2) $ do
        putStrLn "Syntax: passwd-al filename uid"
        existFailure

编译器出现了错误:函数'putStrLn'被应用于两个参数,但显然它只接受一个字符串,而existFailure只是来自System.Exit的另一个IO操作。
如何修复这个问题?

11
只有当编译器将最后一行视为比前一行缩进更深时,才会发生此错误。从代码中删除所有制表符,改用空格,并确保这两个最后的行排列一致。更改编辑器设置,使按下制表符键插入适当数量的空格,或避免使用制表符键。 - AndrewC
1个回答

9
我在你发布的代码中没有遇到putStrLn相关的错误 - 它是完好无损的(请注意,间距可能不同,SO不会复制制表符,只通过空格显示缩进,这对于Haskell很重要)。
然而,你使用了existFailure,我认为这非常酷,但你可能打算使用函数exitFailure。请注意existexit之间的区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接