Haskell:
Läsa en textfil
Hur gör man:
import System.IO
-- Enkel filinläsning
main :: IO ()
main = do
fileContent <- readFile "exempel.txt"
putStrLn fileContent
-- Läsa fil med hantering av IO-fel
tryReading :: IO ()
tryReading = do
handle <- openFile "icke_existerande.txt" ReadMode
contents <- hGetContents handle
putStrLn contents
hClose handle
Förväntat resultat:
-- Första exemplet ger oss innehållet av 'exempel.txt' skrivet ut i terminalen.
-- Andra exemplet utlöser ett IOException om filen inte finns.
Fördjupning
Haskell’s IO-system kan verka förvirrande för nybörjare, men det är en reflektion av det funktionella paradigmets rena hantering av effekter. Historiskt sätt har program språk hanterat inläsning av filer olika. I Haskell använder vi IO
monaden för att hantera sidoeffekter såsom filinläsning.
Alternativ för filinläsning inkluderar användning av ByteString
eller Text
för större eller mer komplexa filer eftersom de hanterar minneseffektivitet och teckenkodning bättre. Versionshantering i Haskell följer utgåvor av The Haskell Report, där den senaste versionen är Haskell 2010, med revisions via GHC-uppdateringar.
Detaljer i implementeringen att tänka på är lazy versus strict IO, där lazy IO låter dig börja bearbeta data innan hela filen har lästs in, vilket kan vara minneseffektivt och snabbt för stora filer. Strict IO läser hela filen på en gång.
Se även
- The Haskell 2010 Language Report: https://www.haskell.org/onlinereport/haskell2010/
- Real World Haskell, book by Bryan O’Sullivan for practical Haskell advice: http://book.realworldhaskell.org/
- “Learn You a Haskell for Great Good!”, a fun guide to Haskell: http://learnyouahaskell.com/