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