Difference between revisions of "FP Laboratory 12"
Jump to navigation
Jump to search
(Marked this version for translation) |
|||
Line 3: | Line 3: | ||
* Create a program that reads a file and number it's lines and writes it on the screen. | * Create a program that reads a file and number it's lines and writes it on the screen. | ||
</translate> | </translate> | ||
− | + | <translate> | |
+ | For the solution look at: [[https://hackage.haskell.org/package/base-4.16.0.0/docs/System-IO.html#v:openFile <code>openFile :: FilePath -> IOMode -> IO Handle</code>]] | ||
+ | </translate> | ||
<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"> | ||
<syntaxhighlight lang="Haskell"> | <syntaxhighlight lang="Haskell"> |
Revision as of 12:38, 6 December 2021
Working with files - monad IO
- Create a program that reads a file and number it's lines and writes it on the screen.
For the solution look at: [openFile :: FilePath -> IOMode -> IO Handle
]
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