[英]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 参数的列表。
print
从你给它的任何参数产生一个String
。
另一方面, putStrLn
需要一个String
作为参数。 (确实, print = putStrLn . show
。)同样, read
需要一个String
作为参数; 实际上,当您尝试执行的是序列化列表时,它会反序列化。
getArgs
类型为IO [String]
,这意味着该line
不是String
,但String
和Show a => [a]
都有一个Show
实例,可以使用它print
出一个String
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.