Haskell IO : Printing Command Line Arguments
我有这个程序,它只打印出命令行参数。
1 2 3 4
| echoArgs :: IO ()
echoArgs = do
line <- getArgs
print line |
我想知道的是为什么我输入时会失败:
1 2 3 4
| echoArgs :: IO ()
echoArgs = do
line <- getArgs
putStrLn line |
以及为什么当我将其更改为时它不起作用:
因为
所以 do { line <- getArgs ; ... } 中的 line 是
但 putStrLn :: String -> IO () 需要一个 String 参数,而不是 Strings 的列表。
同样,read :: Read a => String -> a 也需要一个 String 参数,而不是 String 参数的列表。
另请参阅:do 表示法中的类型指南,生动的颜色。
print 从你给它的任何参数中产生一个 String。
另一方面,
putStrLn 期望 String 作为参数。 (确实,print = putStrLn . show。)类似地,read 需要一个 String 作为参数。实际上,当您尝试序列化列表时,它会反序列化。
getArgs 具有 IO [String] 类型,这意味着 line 不是 String,但 String 和 Show a => [a] 都有一个 Show 实例,print 可以使用该实例来生成 String 摆脱它。