2012-05-02 15 views
1
main :: IO() 
main = do 
    contents <- readFile "text.txt" 
    let database = (read contents :: [Film]) 
    putStr "Please enter your username: " 
    userName <- getLine 
    menu database   
    where menu newDb = do putStrLn "\nPlease select an option:" 
          putStrLn "1: Display all films currently in the database" 
          putStrLn "2: Add a new film to the database" 
          putStrLn "3: Search for films by director" 
          putStrLn "5: Exit" 
          putStr "\nSelected option: " 
          option <- getLine 
          case option of 
             "1" -> putStrLn(formatDatabase newDb) 
             "2" -> do putStr "Name of film: " 
               title <- getLine 
               putStr "Name of director: " 
               director <- getLine 
               putStr "Year of release: " 
               year <- getLine 
               putStrLn(formatDatabase $ addFilm title director (read year) [] newDb) 
             "3" -> do putStr "Name of director: " 
               director <- getLine 
               putStrLn $ formattedByDirector director 
          menu newDb 

戻り値のエラー:Haskellのフォーマットの問題

Parse error in pattern: putStr 

On the line: "2" -> do putStr "Name of film: " 

答えて

5

あなたはすべてのdo後の最初のトークンのレベルにdoブロック内の行をインデントしなければなりません。同じことは、多くの教科書で見られる方法で、あなたのコードをインデントしていない場合3.

case option of 
    "1" -> putStrLn(formatDatabase newDb) 
    "2" -> do putStr "Name of film: " 
      title <- getLine 
      putStr "Name of director: " 
      director <- getLine 
      putStr "Year of release: " 
      year <- getLine 
      putStrLn(formatDatabase $ addFilm title director (read year) [] newDb) 
    "3" -> do putStr "Name of director: " 
      director <- getLine 
      putStrLn $ formattedByDirector director 
+0

これは問題が解決しなかった、私はまだ同じエラーを持っている:

はここではるかにまともなスタイルガイドだパターンで解析エラー:putStr – JamieB

+1

をあなたは、タブを使用していますか?その場合、8つのスペースタブが仮定されています。たぶんそれがあなたのエラーの原因です。 – m09

+0

@JamieB Mogが言ったようなものでなければならない。 –

関連する問題