Haskell -- main.hs:121:19: 输入“<-”时出现解析错误

Haskell -- main.hs:121:19: parse error on input `<-'

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"

我不确定我做错了什么以及为什么会出现此错误。

一个 let 块后面应该有更多的 'variable' 赋值,或者应该结束。在这种情况下,您希望在 let 下对齐下一步操作。所有这些都应该在 do 语句中。

所以....你想在你的 then 之后有一个 do,你想用 let 命令对齐 list <- ...mapM_ ... :

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"