繁体   English   中英

Haskell IO:打印命令行参数

[英]Haskell IO : Printing Command Line Arguments

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

echoArgs :: IO ()
echoArgs = do
        line <- getArgs
        print line

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

echoArgs :: IO ()
echoArgs = do
            line <- getArgs
            putStrLn line

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

echoArgs :: IO String
    echoArgs = do
                line <- getArgs
                let line' = read line :: String
                putStrLn line'

因为

getArgs :: IO [String]

所以line in do { line <- getArgs ; ... } do { line <- getArgs ; ... }

line    ::    [String]

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

同样, read :: Read a => String -> a也需要一个String参数,而不是String s 参数的列表。

另请参阅: do notation 中的类型指南,In Vivid Colors

print从你给它的任何参数产生一个String

另一方面, putStrLn需要一个String作为参数。 (确实, print = putStrLn . show 。)同样, read需要一个String作为参数; 实际上,当您尝试执行的是序列化列表时,它会序列化

getArgs类型为IO [String] ,这意味着该line不是String ,但StringShow a => [a]都有一个Show实例,可以使用它print一个String

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM