第一个Haskell IO程序无法正常工作

时间:2015-10-24 18:14:49

标签: haskell

对不起,这可能真的很蠢,但有人能解释一下为什么这个程序不能编译?我得到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

1 个答案:

答案 0 :(得分:4)

你不能lines . readFile "lastnames"

readFile函数返回IO String,而不是String

可以使用fmap函数(或<$>运算符)来实现此目的:

main = do
  [first, last] <- argArgs
  firstnames <- lines `fmap` readFile "firstnames_males"
  ...

这是有效的,因为IO是一个仿函数。