initial start with week3, wine yay
[fp1415.git] / fp2 / week1 / mart / SimpleFileIO.icl
1 implementation module SimpleFileIO
2
3 import StdEnv, StdFile, StdOverloaded, StdMaybe
4
5 // 1.
6 readFile :: String *env -> (Maybe String, *env) | FileSystem env
7 readFile s env
8 # (ss, env) = readLines s env
9 | ss == Nothing = (Nothing, env)
10 | otherwise = (Just (foldl (+++) "" (fromJust ss)), env)
11
12 writeFile :: String String *env -> (Bool, *env) | FileSystem env
13 writeFile fn s env
14 # (ok, outfile, env) = fopen fn FWriteText env
15 | not ok = (False, env)
16 # outfile = fwrites s outfile
17 # (ok, env) = fclose outfile env
18 | otherwise = (ok, env)
19
20 // 2.
21 readLines :: String *env -> (Maybe [String],*env) | FileSystem env
22 readLines s env
23 # (ok, infile, env) = sfopen s FReadText env
24 | not ok = (Nothing, env)
25 | otherwise = (Just (fst (readLines` infile)), env)
26 where
27 readLines` :: File -> ([String], File)
28 readLines` file
29 | sfend file = ([], file)
30 # (line, file) = sfreadline file
31 # (ss, file) = readLines` file
32 | otherwise = ([line : ss], file)
33
34 writeLines :: String [String] *env -> (Bool, *env) | FileSystem env
35 writeLines fn ss env = writeFile fn (foldl (+++) "" [s +++ "\n" \\ s <- ss]) env
36
37 // 3.
38 //mapFile :: String String (a -> b) *env -> (Bool, *env) | FileSystem env & ... a & ... b
39