Noch einmal bin ich mit Haskell festgefahren. Diesmal sollte ich einen CSV-Datensatz filtern, mit IO, den ich nicht verstehen kann. Alle weiteren damit verbundenen Informationen sind willkommen.Haskell I/O: Leere Listen im CSV-Datensatz filtern
Die Struktur ist vorbestimmt, und mir scheint es chaotisch. Soll das wirklich so sein? (Ich muss es immer noch so machen, also ist das ein wenig "auf der Seite" -Frage).
getRawData' :: String -> IO [[String]]
getRawData' fn = do
s <- readFile fn
return $ parseCSVsimple s
getRawData :: String -> IO [[String]]
getRawData fn = do
d <- getRawData' fn
return (dropEmpty d)
dropEmpty [[String]] -> [[String]]
DropEmpty - Dies ist, wo ich Für einen „normalen“ -Liste die Hilfe benötigen, würde ich es nur einfach filtern, aber das IO und sich gegenseitig anrufen verschiedene Funktionen hat mich verwirrt.
Sorry für dumme Fragen, ich habe für 8 Monate programmiert und musste seitdem 6-7 Sprachen verwenden. Alle allgemeinen Informationen zu der Frage werden ebenfalls sehr geschätzt.
BEARBEITEN; Follow-up:
Dank der guten Antworten, die ich habe mein Verständnis verbessert und implementiert den folgenden Code:
dropEmpty :: [[String]] -> [[String]]
dropEmpty = filter(not . null)
Allerdings habe ich noch leere Listen in der Liste zu sehen. Ist das, weil ich überprüfe, ob die ganze Liste von Listen leer ist? Wie stelle ich fest, dass ich die "internen" Listen überprüfen möchte?
Sobald Sie 'dropEmpty' erreicht haben, sind Sie außerhalb von IO und müssen sich nur noch mit reinem Haskell beschäftigen. Filtern Sie es einfach wie eine normale Liste. – MicroVirus
Ihre DropEmpty-Funktion ist korrekt. Denken Sie daran, dass die Liste von Haskell unveränderlich ist, damit Ihre DropEmpty-Eingabeliste nicht geändert wird. Sie müssen das Ergebnis der Funktion überprüfen. – Bruno