Изложение дела на Хаскеле - PullRequest
1 голос
/ 06 декабря 2011

У меня есть что-то вроде этого

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

Это не работает, поэтому мой вопрос заключается в том, как я могу использовать оператор переключения регистра для чего-то для изменения ввода Например, в моем коде я хочу, чтобы ввод изпользователь может быть либо q, либо нагрузкой, но нагрузка будет постоянно меняться:

load "sample.csv"
load "test.csv"
load "helloworld.csv"

В моем коде я указал постоянно изменяющийся ввод как X, но это не работает, как я ожидал.

Помощь будет оценена, спасибо.

1 Ответ

6 голосов
/ 06 декабря 2011

Как уже упоминали другие, проблема заключается в сопоставлении вашего шаблона.

Вот простой способ обойти это (и при этом иметь что-то читаемое).

  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!"

Примечание - x, который вы имели выше, на самом деле unwords x здесь.

...