Haskell案例陈述

Dus*_*nny 1 haskell input case switch-statement

我有这样的代码

main :: [[String]] -> IO ()
main st = do
    answer <- getLine
    case answer of
      "q" -> return ()
      "load" x -> main $ parseCSV $ readFile x
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我的问题是如何使用case switch语句来改变输入的内容例如在我的代码中我希望用户的输入是q或load,但是负载会不断变化:

load "sample.csv"
load "test.csv"
load "helloworld.csv"
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我将不断变化的输入表示为X,但这并不像我预期的那样工作.

感谢帮助,谢谢.

Ada*_*ner 6

正如其他人所提到的,问题在于您的模式匹配.

这是一种解决这个问题的简单方法(并且仍然具有可读性).

  1. 分割answer成单词匹配(与words功能).
  2. 使用模式匹配中的第一个单词.
  3. 如果你想使用剩余的"单词",只需要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!"
Run Code Online (Sandbox Code Playgroud)

注意 - x你上面的实际上就是unwords x这里.