2011-12-05 26 views
1

私は私の質問は、私は私のコードでたとえば入力 を変える何かのためにケースのswitch文をどのように使用することができているので、私が欲しい、これは動作しません。このHaskellのcase文

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として絶えず変化する入力を示したが、私はそれを期待通り、これは動作しません。

ご協力いただきありがとうございます。

+0

質問にコンパイラエラーを追加できますか? – KCH

+3

@KrzysztoChrobak:エラーはかなり明白です。 - "load" x "は有効なパターンではありません。 –

+1

この質問をチェックアウトする必要があります:http://stackoverflow.com/questions/1602243/pattern-matching-string-prefixes-in-haskell –

答えて

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

注 - 上記の持っていたxここで、実際にunwords xです。

+0

ありがとうございました:)それはとても役に立ちました – DustBunny

+0

ここに貼り付けたコードは、あなたのために(まったく同じように)働き、一般的にあなたがしたいことですが、過去には得られないコンパイルエラーで問題がありますそれは別の質問のための良い話題になります。 –

+0

ありがとう:)申し訳ありませんが面倒、それは私のコーディングの欠陥だった。私はちょうど( "q":_)の括弧でエラーが発生したために疑問に思っていた、ありがとうございました – DustBunny