我的代码类似
main :: [[String]] -> IO ()
main st = do
answer <- getLine
case answer of
"q" -> return ()
"load" x -> main $ parseCSV $ readFile x
这不起作用,所以我的问题是我如何使用case switch语句来改变输入 例如,在我的代码中,我希望用户的输入为q或load,但负载将不断变化:
load "sample.csv"
load "test.csv"
load "helloworld.csv"
在我的代码中,我将不断变化的输入表示为X,但这并不像我预期的那样有效。
帮助将不胜感激,谢谢。
答案 0 :(得分:6)
正如其他人所提到的,问题在于您的模式匹配。
这是解决这个问题的简单方法(并且仍然具有可读性)。
answer
拆分为单词以进行匹配(使用words
功能)。unwords
列表中剩余的元素即可获得字符串。示例:
main :: IO ()
main = do
answer <- getLine
case words answer of
("q":_) -> putStrLn "I'm quitting!"
("load":x) -> putStrLn ("Now I will load " ++ unwords x)
otherwise -> putStrLn "Not sure what you want me to do!"
注意 - 您上面的x
实际上是unwords x
。