import System.Environment
import Control.Monad
getLines = liftM lines . readFile
main = do
argv <- getArgs
name <- getProgName
if not (null argv)
then let file = head argv
list <- getLines file
mapM_ putStrLn list
else hPutStr stderr $ "usage: " ++ name ++ " number\n"
我不确定我做错了什么以及为什么我会收到这个错误。
答案 0 :(得分:3)
let
块应该跟随更多&#39;变量&#39;作业,或应该结束。在这种情况下,您希望对齐let
下的下一个操作。所有这些都应该在do
声明中。
所以......你希望在do
后面有一个then
,并且想要将list <- ...
和mapM_ ...
与let命令对齐:< / p>
main = do
argv <- getArgs
name <- getProgName
if not (null argv)
then do
let file = head argv
list <- getLines file
mapM_ putStrLn list
else hPutStr stderr $ "usage: " ++ name ++ " number\n"