File Haskell--main.hs:121:19:输入上的解析错误`<-'; 导入系统环境 进口管制 getLines=liftM行。读取文件 main=do argv

File Haskell--main.hs:121:19:输入上的解析错误`<-'; 导入系统环境 进口管制 getLines=liftM行。读取文件 main=do argv,file,parsing,haskell,line,main,File,Parsing,Haskell,Line,Main,Aletblock后面应该跟有更多的“变量”赋值,或者应该结束。在这种情况下,您希望对齐let下的下一个操作。所有这些都应该在do语句中 所以。。。。您希望在之后有一个do,然后,并且您希望对齐列表alet块后面应该有更多的“变量”赋值,或者应该结束。在这种情况下,您希望对齐let下的下一个操作。所有这些都应该在do语句中 所以。。。。您希望在之后有一个do,然后,并且您希望对齐列表alet块后面应该有更多的“变量”赋值,或者应该结束。在这种情况下,您希望对齐let下的下一个操作。所有这些都应该

A
let
block后面应该跟有更多的“变量”赋值,或者应该结束。在这种情况下,您希望对齐
let
下的下一个操作。所有这些都应该在
do
语句中


所以。。。。您希望在
之后有一个
do
,然后
,并且您希望对齐
列表a
let
块后面应该有更多的“变量”赋值,或者应该结束。在这种情况下,您希望对齐
let
下的下一个操作。所有这些都应该在
do
语句中


所以。。。。您希望在
之后有一个
do
,然后
,并且您希望对齐
列表a
let
块后面应该有更多的“变量”赋值,或者应该结束。在这种情况下,您希望对齐
let
下的下一个操作。所有这些都应该在
do
语句中


所以。。。。您希望在
之后有一个
do
,然后
,并且您希望对齐
列表a
let
块后面应该有更多的“变量”赋值,或者应该结束。在这种情况下,您希望对齐
let
下的下一个操作。所有这些都应该在
do
语句中


所以。。。。你想在你的
之后有一个
do
,然后
,你想对齐
列表谢谢,我是Haskell的新手,但是这种方法似乎是处理文件的一种很好的标准方法,或者有没有更首选的方法?始终取决于你的使用情况。你是在问它是不是地道的?不一定,但这不重要。使用您现在拥有的,当您开始变得更高级时,您将最终重构它。现在不用担心它是否管用。谢谢,我是Haskell的新手,但这种方法似乎是处理文件的一种很好的标准方法,还是有更首选的方法?始终取决于您的使用情况。你是在问它是不是地道的?不一定,但这不重要。使用您现在拥有的,当您开始变得更高级时,您将最终重构它。现在不用担心它是否管用。谢谢,我是Haskell的新手,但这种方法似乎是处理文件的一种很好的标准方法,还是有更首选的方法?始终取决于您的使用情况。你是在问它是不是地道的?不一定,但这不重要。使用您现在拥有的,当您开始变得更高级时,您将最终重构它。现在不用担心它是否管用。谢谢,我是Haskell的新手,但这种方法似乎是处理文件的一种很好的标准方法,还是有更首选的方法?始终取决于您的使用情况。你是在问它是不是地道的?不一定,但这不重要。使用您现在拥有的,当您开始变得更高级时,您将最终重构它。如果有用的话,现在不用担心。
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"
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"