Difference between revisions of "PFP Laboratory 7"
Jump to navigation
Jump to search
Line 2: | Line 2: | ||
* 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. | ||
<div> | <div> | ||
− | For the solution look at: | + | 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>] |
− | The <code>Handle</code> can used to work with a file. The function to read a content: | + | The <code>Handle</code> can used to work with a file. The function to read a content:[https://hackage.haskell.org/package/base-4.16.0.0/docs/System-IO.html#v:hGetContents <code>hGetContents :: Handle -> IO String</code>] |
− | At the end, you should close the opened file handle: | + | At the end, you should close the opened file handle: [https://hackage.haskell.org/package/base-4.16.0.0/docs/System-IO.html#v:hClose <code>hClose :: Handle -> IO ()</code>] |
− | Alternatively you can use : | + | Alternatively you can use : [https://hackage.haskell.org/package/base-4.16.0.0/docs/Prelude.html#v:readFile <code>readFile :: FilePath -> IO String</code>] |
</div> | </div> | ||
Revision as of 11:47, 30 September 2022
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
The Handle
can used to work with a file. The function to read a content:hGetContents :: Handle -> IO String
At the end, you should close the opened file handle: hClose :: Handle -> IO ()
Alternatively you can use : readFile :: FilePath -> IO String
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
Computing PI
- Create a program, that computes aproximation of PI using random numbers - Idea.
- The number of steps will be defined as program's argument.