Ich habe den folgenden Code in Haskell, der mir einen Fehler in der ersten Zeile der Funktion bookFromFile gibt. Was mache ich falsch?Haskell - Lesen von Daten aus Datei und Speichern in einem Container
Der Fehlercode ist unten.
import Data.List
import System.IO
type Book = (Int, String, String, String, String, String, String)
main = do
inputFile <- openFile "catalogo.txt" ReadMode
let b = (bookFromFile inputFile)
print "done"
bookFromFile :: Handle -> Book
bookFromFile inputFile = do
--Read&Store stuff from file
isbn <- fmap read (hGetLine inputFile) :: IO Int
title <- (hGetLine inputFile)
author <- (hGetLine inputFile)
genre <- (hGetLine inputFile)
date <- (hGetLine inputFile)
publisher <- (hGetLine inputFile)
summary <- (readSummary inputFile) --readSummary :: Handle -> IO String (works well)
putStr (summary ++ "\n")
--Construct and return a book
(isbn, title, author, genre, date, publisher, summary)
Merkwürdigerweise (Int, String, String, String, String, String, Int) ist nicht einmal der Typ I für Buch definiert haben. Fehlermeldung:
* Couldn't match type `IO'
with `(,,,,,,) Int String String String String String'
Expected type: (Int, String, String, String, String, String, Int)
Actual type: IO Int
* In a stmt of a 'do' block:
isbn <- fmap read (hGetLine inputFile) :: IO Int
In the expression:
do { isbn <- fmap read (hGetLine inputFile) :: IO Int;
putStr ((show isbn) ++ "\n");
title <- (hGetLine inputFile);
putStr (title ++ "\n");
.... }
Dieser Code liest sich wie C zu Haskell umgewandelt, nicht idiomatischen Haskell .... Y Sie sollten Haskell Faulheit, 'ReadFile',' Linien' und eine Reihe von reinen Funktionen nutzen, die wirklich den Grund zeigen würden, Haskell über C zu wählen. – jamshidh