Haskell IO:打印命令行参数

Rah*_*hat 0 io monads haskell command-line-arguments do-notation

我有这个程序,它只是打印出命令行参数。

echoArgs :: IO ()
echoArgs = do
        line <- getArgs
        print line
Run Code Online (Sandbox Code Playgroud)

我想知道的是为什么当我输入时会失败:

echoArgs :: IO ()
echoArgs = do
            line <- getArgs
            putStrLn line
Run Code Online (Sandbox Code Playgroud)

以及为什么当我将其更改为以下内容时它不起作用:

echoArgs :: IO String
    echoArgs = do
                line <- getArgs
                let line' = read line :: String
                putStrLn line'
Run Code Online (Sandbox Code Playgroud)

Wil*_*ess 7

因为

getArgs :: IO [String]
Run Code Online (Sandbox Code Playgroud)

所以linedo { line <- getArgs ; ... }

line    ::    [String]
Run Code Online (Sandbox Code Playgroud)

putStrLn :: String -> IO ()需要一个String参数,而不是Strings的列表。

同样,read :: Read a => String -> a也期望一个String参数,而不是Strings 参数的列表。

另请参阅:使用do符号的类型指南,生动的颜色