我在网上找到了这段代码,但它没有运行。
main = do
xs <- getLine []
print xs
那么如何在 Haskell 中向用户询问列表输入呢?我是Haskell的新手,请在回答时解释一下。谢谢。
我在网上找到了这段代码,但它没有运行。
main = do
xs <- getLine []
print xs
那么如何在 Haskell 中向用户询问列表输入呢?我是Haskell的新手,请在回答时解释一下。谢谢。
你这样做,例如:
main :: IO ()
main = do
xs <- getLine
let { ints :: [Int]
; ints = read xs
}
print $ take 2 ints
并且您必须以有效的列表语法输入输入,例如
[1,2,3]
请注意,do
-block 中的每一行必须以相同的缩进级别开始(除非使用显式分隔符{ ; }
)。
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
使用Functor
实例 forIO
应用于将产生read
的字符串getLine
;read
的具体类型将从给定的类型中推断出来getIntList
: since getIntList :: IO [Int]
, then fmap read :: IO String -> IO [Int]
, soread :: String -> [Int]
将被使用。