Haskell案例陈述

时间:2011-12-05 23:09:18

标签: haskell input case switch-statement

我的代码类似

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,但这并不像我预期的那样有效。

帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:6)

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

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

  1. answer拆分为单词以进行匹配(使用words功能)。
  2. 使用模式匹配中的第一个单词。
  3. 如果您想使用剩余的“字词”,只需unwords列表中剩余的元素即可获得字符串。
  4. 示例:

    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