Difference between revisions of "FP Laboratory 12/cs"

From Marek Běhálek Wiki
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:
== Working with files - monad IO ==
+
== Práce se soubody - monáda IO ==
* Create a program that reads a file and number it's lines and writes it on the screen.
+
* 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