implementation module SimpleFileIO import StdEnv, StdFile, StdOverloaded, StdMaybe // 1. readFile :: String *env -> (Maybe String, *env) | FileSystem env readFile s env # (ss, env) = readLines s env | ss == Nothing = (Nothing, env) | otherwise = (Just (foldl (+++) "" (fromJust ss)), env) writeFile :: String String *env -> (Bool, *env) | FileSystem env writeFile fn s env # (ok, outfile, env) = fopen fn FWriteText env | not ok = (False, env) # outfile = fwrites s outfile # (ok, env) = fclose outfile env | otherwise = (ok, env) // 2. readLines :: String *env -> (Maybe [String],*env) | FileSystem env readLines s env # (ok, infile, env) = sfopen s FReadText env | not ok = (Nothing, env) | otherwise = (Just (fst (readLines` infile)), env) where readLines` :: File -> ([String], File) readLines` file | sfend file = ([], file) # (line, file) = sfreadline file # (ss, file) = readLines` file | otherwise = ([line : ss], file) writeLines :: String [String] *env -> (Bool, *env) | FileSystem env writeLines fn ss env = writeFile fn (foldl (+++) "" [s +++ "\n" \\ s <- ss]) env // 3. //mapFile :: String String (a -> b) *env -> (Bool, *env) | FileSystem env & ... a & ... b