Effectful file operations.
- A : Type
- A file can only be appended to. 
- APlus : Type
- A file will read from the beginning and write at the end. 
- FILE : (ty : Type) ->
EFFECT
- Effectful operations for interacting with files. - The - FILEeffect is parameterised by a file handle once a handle has been acquired, and Unit (- ()) if the file handle is expected to be released once the function has returned.
 
- data FileE : Effect
- An effect to describe operations on a file. - Open : (fname : String) ->
(m : Mode) ->
sig FileE
FileOpSuccess
()
(\res =>
calcResourceTy m
res)
- OpenX : (fname : String) ->
(m : Mode) ->
sig FileE
FileOpSuccess
()
(\res =>
calcResourceTy m
res)
- Close : sig FileE
()
(FileHandle m)
()
- FGetC : {auto prf : ValidModeRead m} ->
sig FileE
(FileOpResult Char)
(FileHandle m)
(FileHandle m)
- FGetLine : {auto prf : ValidModeRead m} ->
sig FileE
(FileOpResult String)
(FileHandle m)
(FileHandle m)
- FReadFile : (fname : String) ->
sig FileE
(FileOpResult String)
()
()
- FPutStr : (str : String) ->
{auto prf : ValidModeWrite m} ->
sig FileE
FileOpSuccess
(FileHandle m)
(FileHandle m)
- FPutStrLn : (str : String) ->
{auto prf : ValidModeWrite m} ->
sig FileE
FileOpSuccess
(FileHandle m)
(FileHandle m)
- FWriteFile : (fname : String) ->
(contents : String) ->
sig FileE
FileOpSuccess
()
- FFlush : sig FileE
()
(FileHandle m)
(FileHandle m)
- FEOF : {auto prf : ValidModeRead m} ->
sig FileE
Bool
(FileHandle m)
 
- data FileHandle : (m : Mode) ->
Type
- The file handle associated with the effect. - m
- The - Modethat the handle was generated under.
 
 - FH : File ->
FileHandle m
 
- R : Type
- A file has been opened for reading. 
- RW : Type
- A file can be read and written to. 
- RWPlus : Type
- A file opened for reading and writing and has been truncated to
 zero if it previously existed.
 
- data ValidModeRead : Mode ->
Type
- A record of the file modes that can read from a file. - VMRRead : ValidModeRead Read
- VMRReadW : ValidModeRead ReadWrite
- VMRReadWT : ValidModeRead ReadWriteTruncate
- VMRReadA : ValidModeRead ReadAppend
 
- data ValidModeWrite : Mode ->
Type
- A record of the file modes that can write from a file. - VMWWrite : ValidModeWrite WriteTruncate
- VMWAppend : ValidModeWrite Append
- VMWReadW : ValidModeWrite ReadWrite
- VMWReadWT : ValidModeWrite ReadWriteTruncate
 
- W : Type
- A file has been opened for writing. 
- calcResourceTy : (m : Mode) ->
(ty : FileOpReturnTy fOpTy
retTy) ->
Type
- Calculates the type for the resource being computed over. - Unit
 to describe pre-and-post file handle acquisition, and- FileHandle
mwhen a file handle has been acquired.
 - m
- The mode the file handle was generated under. 
- ty
- The functions return type. 
 
- close : Eff ()
[FILE (FileHandle m)]
[FILE ()]
- Close a file. 
- eof : {auto prf : ValidModeRead m} ->
Eff Bool
[FILE (FileHandle m)]
- Have we reached the end of the file. 
- flush : Eff ()
[FILE (FileHandle m)]
- open : (fname : String) ->
(m : Mode) ->
Eff FileOpSuccess
[FILE ()]
(\res =>
[FILE (calcResourceTy m
res)])
- Open a file. - fname
- the filename. 
- m
- the mode; either Read, WriteTruncate, Append, ReadWrite,
 ReadWriteTruncate, or ReadAppend
 
 
- openX : (fname : String) ->
(m : Mode) ->
Eff FileOpSuccess
[FILE ()]
(\res =>
[FILE (calcResourceTy m
res)])
- Open a file using C11 extended modes. - fname
- the filename 
- m
- the mode; either Read, WriteTruncate, Append, ReadWrite,
 ReadWriteTruncate, or ReadAppend
 
 
- readChar : {auto prf : ValidModeRead m} ->
Eff (FileOpResult Char)
[FILE (FileHandle m)]
- Read a - Char.
 
- readFile : (fname : String) ->
Eff (FileOpResult String)
[FILE ()]
- Read the contents of a file into a string. - This checks the size of
 the file before beginning to read, and only reads that many bytes,
 to ensure that it remains a total function if the file is appended
 to while being read.
 - Returns an error if fname is not a normal file. 
- readLine : {auto prf : ValidModeRead m} ->
Eff (FileOpResult String)
[FILE (FileHandle m)]
- Read a complete line. 
- writeFile : (fname : String) ->
(contents : String) ->
Eff FileOpSuccess
[FILE ()]
- Create a file and write contents to the file. 
- writeLine : (str : String) ->
{auto prf : ValidModeWrite m} ->
Eff FileOpSuccess
[FILE (FileHandle m)]
- Write a complete line to the file. 
- writeString : (str : String) ->
{auto prf : ValidModeWrite m} ->
Eff FileOpSuccess
[FILE (FileHandle m)]
- Write a string to the file.