我需要打开一个文件,读取第一行,将数字转换为整数X,然后从第二行读取一个X整数数组。可以在Haskell中完成吗?
以下代码:
main = do
val1 <- getLine
val2 <- getLine
print val1
print map read (words val2) :: Int
给出了这个错误:
Couldn't match expected type `(String -> a1) -> [String] -> Int'
with actual type `IO ()'
答案 0 :(得分:2)
由于懒惰,你通常不用担心逐行阅读,getContents很好。虽然,在你的情况下,也许两次调用getLine并不是那么糟糕。
您的代码很好(虽然它不会从列表中只取X个数字),但它只是您的类型,这是不对的。这一行应该让你前进:
print (map read (words val2) :: [Int])
您可能也想使用val1,如下所示:
print $ take (read val1) (map read (words val2) :: [Int])