Gestatten Sie mir zu teilen, was ich bisher haben zu starten:Laden/Ändern/Speichern von Änderungen in Textdatei
main :: IO()
main = do contents <- readFile "filmList.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 (and display all films)"
putStrLn "3: "
putStrLn "4: Save Database"
putStrLn "5: Exit"
putStr "\nSelected option: "
option <- getLine
case option of "1" -> putStrLn(displayFilms newDb)
"2" -> do putStr "Name of film: "
title <- getLine
putStr "Name of director: "
director <- getLine
putStr "Year of release: "
year <- getLine
putStrLn(displayFilms (addNewFilm title director (read year) newDb))
menu newDb
`
ich es geschafft haben, eine TXT-Datei mit der Datenbank von Filmtypen zu laden aber ich kann nicht herausfinden, wie man Änderungen an den Daten vornimmt. Wenn ich Option 2 starte, erhalte ich eine Liste aller Filme mit dem neu hinzugefügten Film, aber wenn ich dann Option 1 benutze, um alle Filme aufzulisten, wird der neu hinzugefügte Film nicht berücksichtigt. Soll ich jedes Mal, wenn eine neue Film-Instanz hinzugefügt wird, wieder in die TXT-Datei speichern? Jede Hilfe wird sehr geschätzt, danke!
Danke Daniel, ich habe es geschafft, dieses Problem jetzt zu lösen, und bin in der Lage, in txt-Datei auch schön zu speichern. Ich habe jedoch nachgedacht, was Sie über die Vereinheitlichung des repetitiven Codes gesagt haben. Wie würdest du mir empfehlen, das zu tun? Ich kann scheinbar nichts Nützliches online finden. Vielleicht muss ich an den richtigen Stellen suchen. Können Sie mir dazu einen Rat geben? Ich schätze es sehr. Vielen Dank. –
@KieranEdwards Erwägen Sie, eine andere Funktion 'menuWithPrint db = putStrLn (displayFilms db) >> menu db' zu definieren und diese aufzurufen, anstatt den Code in beiden Zweigen zu duplizieren. –
Wenn Sie in Zukunft mehr idiomatischen Code schreiben möchten, erfahren Sie mehr über Monad-Transformatoren. Ihr Code wäre viel einfacher, wenn Sie die 'StateT [Film] IO()' Monade verwenden würden. Zuerst müssen Sie etwas über die [Staatsmonde] erfahren (http://mvanier.livejournal.com/5406.html) und dann etwas über [Monad Transformer] erfahren (http://www.grabmueller.de/martin/www/pub) /Transformers.pdf). –