在 Haskell 中要求用户输入列表

Ask user for list input in Haskell

我在网上找到了这段代码,但不是运行。

main = do
 xs <- getLine []
print xs

那么我如何要求用户在 Haskell 中输入列表?我是Haskell的新手,回答时请说明。谢谢

getLine 是一个 IO 动作,它产生一个字符串,没有别的。收到该字符串后,您需要对其进行处理。例如,这里有一个 IO 操作,它将适当的输入解析为 Int 个值的列表。

getIntList :: IO [Int]
getIntList = fmap read getLine

main = do
         ints <- getIntList
         print ints

列表有一个 Read 实例,因此以下工作:

> read "[1,2,3]" :: [Int]
[1,2,3]

getIntList 使用 IOFunctor 实例将 read 应用于 getLine 将生成的字符串; read 的具体类型将从给定给 getIntList 的类型中推断出来:因为 getIntList :: IO [Int],然后 fmap read :: IO String -> IO [Int],所以 read :: String -> [Int] 将被使用。

你这样做,例如像这样:

main :: IO ()
main = do
  xs <- getLine
  let { ints :: [Int] 
      ; ints = read xs 
      }
  print $ take 2 ints
  

并且您必须以有效的列表语法输入,例如

[1,2,3]

请注意,do 块中的每一行必须以相同的缩进级别开始(除非使用显式分隔符 { ; })。