对不起,这可能真的很蠢,但有人能解释一下为什么这个程序不能编译?我得到Couldn't match expected type 'a1 -> String' with actual type 'IO String'
。
import System.Environment
main = do
[first, last] <- getArgs
firstnames <- lines . readFile "firstnames_male"
lastnames <- lines . readFile "lastnames"
print firstnames
答案 0 :(得分:4)
你不能lines . readFile "lastnames"
。
readFile
函数返回IO String
,而不是String
。
可以使用fmap
函数(或<$>
运算符)来实现此目的:
main = do
[first, last] <- argArgs
firstnames <- lines `fmap` readFile "firstnames_males"
...
这是有效的,因为IO
是一个仿函数。