Difference between revisions of "FP Laboratory 12/cs"
Jump to navigation
Jump to search
(Created page with "FP Cvičení 12") |
(Created page with "== Práce se soubody - monáda IO == * Implementujte program, který načte soubor a počet jeho řádku a následně jej vypíše na obrazovku.") |
||
Line 1: | Line 1: | ||
− | == | + | == Práce se soubody - monáda IO == |
− | * | + | * Implementujte program, který načte soubor a počet jeho řádku a následně jej vypíše na obrazovku. |
<div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> | <div class="mw-collapsible mw-collapsed" data-collapsetext="Hide solution" data-expandtext="Show solution"> |
Revision as of 11:01, 21 October 2021
Práce se soubody - monáda IO
- Implementujte program, který načte soubor a počet jeho řádku a následně jej vypíše na obrazovku.
import System.IO
import Control.Exception
main = do fromHandle <- opf "Read from: " ReadMode
contents <- hGetContents fromHandle
putStr (numberLines contents)
hClose fromHandle
opf :: String -> IOMode -> IO Handle
opf prompt mode = do putStr prompt
name <- getLine
catch (openFile name mode )
(\e -> do putStr ("Can't open "++name++":"++show (e :: IOException) ++"\n")
opf prompt mode)
numberLines::String -> String
numberLines text = let l = lines text
numbered = zip [1..] l
result = [show x ++".\t"++content++"\n" | (x, content)<-numbered]
in concat result