main = do -- main-funktio määrittää mitä tapahtuu kun ohjelma suoritetaan -- Kysytään käyttäjältä kuinka monta lukua hän aikoo syöttää putStrLn "Kuinka monta lukua syötät?" -- getLine lukee yhden syötetyn tekstirivin, "liftM read" muuntaa sen String:istä Int:iksi. -- (olettaen että käyttäjä syötti validin kokonaisluvun, muussa tapauksessa ohjelma kuolee) -- Lopuksi tulos tallennetaan "muuttujaan" n. n <- liftM read getLine -- Luodaan IO-operaatio joka pyytää käyttäjää syöttämään luvun ja lukee sitten yhden rivin inputia. -- Tämä operaatio toistetaan (replicate) n kertaa ja saadaan sekvenssi joka palauttaa listan kaikista -- riveistä jotka käyttäjä syötti. Lista tallennetaan "muuttujaan" numbers. numbers <- sequence (replicate n (putStr "Syötä luku: " >> getLine)) -- Sovelletaan vanhaa tuttua read:ia numbers-listan jokaiseen elementtiin ja saadaan täten lista -- oikeita desimaalilukuja String:ien sijaan. Lasketaan tämän uuden listan summa (sum) ja tallennetaan -- se "muuttujaan" numSum. let numSum = sum (map read numbers) -- Jaetaan summa numerojen lukumäärällä n. -- (fromIntegral muuntaa n:än kokonaisluvusta desimaaliluvuksi jotta jako on mahdollinen) -- Tallennetaan tulos "muuttujaan" average. let average = numSum / fromIntegral n -- Tulostetaan syötettyjen lukujen keskiarvo. putStrLn ("Syötettyjen lukujen keskiarvo on: " ++ show average)