在 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
使用 IO
的 Functor
实例将 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
块中的每一行必须以相同的缩进级别开始(除非使用显式分隔符 { ; }
)。
我在网上找到了这段代码,但不是运行。
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
使用 IO
的 Functor
实例将 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
块中的每一行必须以相同的缩进级别开始(除非使用显式分隔符 { ; }
)。