Module

pooka/file

src/pooka/file.pooka

Files are the workshop notebooks that stay after the process goes home.

Return filesystem failures as FileError with the relevant path and message. Text reads validate UTF-8; byte APIs retain the original bytes. Directory deletion is nonrecursive, while recursive creation tolerates existing directories.

Pooka
import pooka/file

let result = file.read("notes.txt")

API reference

class

FileError

src/pooka/file.pooka:20
class FileError(path: String, message: String)

A file failure carrying the details needed by its caller. Keep this value in Result until a boundary can explain it.

field

path

src/pooka/file.pooka:20
path: String
INFERREDString
field

message

src/pooka/file.pooka:20
message: String
INFERREDString
constructor

new

src/pooka/file.pooka:20
INFERREDfn(String, String) -> pooka/file.FileError
function

read

src/pooka/file.pooka:58
read(path: String) -> Result(String, FileError)
INFERREDfn(String) -> Result(String, pooka/file.FileError)

Read text and validate that its bytes are UTF-8.

Pooka
import pooka/file

let result = file.read("notes.txt")
function

read_bytes

src/pooka/file.pooka:69
read_bytes(path: String) -> Result(BitArray, FileError)
INFERREDfn(String) -> Result(BitArray, pooka/file.FileError)

Read the original bytes without UTF-8 decoding.

Pooka
import pooka/file

let result = file.read_bytes("notes.bin")
function

write

src/pooka/file.pooka:80
write(path: String, text: String) -> Result(Nil, FileError)
INFERREDfn(String, String) -> Result(Nil, pooka/file.FileError)

Replace a file with the supplied UTF-8 text.

Pooka
import pooka/file

let result = file.write("notes.txt", "oak")
function

write_bytes

src/pooka/file.pooka:91
write_bytes(path: String, data: BitArray) -> Result(Nil, FileError)
INFERREDfn(String, BitArray) -> Result(Nil, pooka/file.FileError)

Replace a file with whole-byte data; non-byte-aligned input is rejected.

Pooka
import pooka/file

let result = file.write_bytes("notes.bin", <<1, 2, 3>>)
function

append

src/pooka/file.pooka:102
append(path: String, text: String) -> Result(Nil, FileError)
INFERREDfn(String, String) -> Result(Nil, pooka/file.FileError)

Append UTF-8 text to a file.

Pooka
import pooka/file

let result = file.append("notes.txt", "pine")
function

exists

src/pooka/file.pooka:114
exists(path: String) -> Result(Bool, FileError)
INFERREDfn(String) -> Result(Bool, pooka/file.FileError)

Test existence. A missing path returns Ok(False); other filesystem errors retain their detail.

Pooka
import pooka/file

let result = file.exists("notes.txt")
function

is_file

src/pooka/file.pooka:125
is_file(path: String) -> Result(Bool, FileError)
INFERREDfn(String) -> Result(Bool, pooka/file.FileError)

Check whether a path names a regular file.

Pooka
import pooka/file

let result = file.is_file("notes.txt")
function

is_directory

src/pooka/file.pooka:136
is_directory(path: String) -> Result(Bool, FileError)
INFERREDfn(String) -> Result(Bool, pooka/file.FileError)

Check whether a path names a directory.

Pooka
import pooka/file

let result = file.is_directory("notes")
function

delete

src/pooka/file.pooka:147
delete(path: String) -> Result(Nil, FileError)
INFERREDfn(String) -> Result(Nil, pooka/file.FileError)

Delete a file, retaining its path in any FileError.

Pooka
import pooka/file

let result = file.delete("temporary.txt")
function

copy

src/pooka/file.pooka:158
copy(source: String, destination: String) -> Result(Nil, FileError)
INFERREDfn(String, String) -> Result(Nil, pooka/file.FileError)

Copy a file to a destination. Failures identify the source path.

Pooka
import pooka/file

let result = file.copy("notes.txt", "notes-copy.txt")
function

rename

src/pooka/file.pooka:169
rename(source: String, destination: String) -> Result(Nil, FileError)
INFERREDfn(String, String) -> Result(Nil, pooka/file.FileError)

Rename a path. Failures identify the source path.

Pooka
import pooka/file

let result = file.rename("old-notes.txt", "notes.txt")
function

list_directory

src/pooka/file.pooka:180
list_directory(path: String) -> Result(List(String), FileError)
INFERREDfn(String) -> Result(List(String), pooka/file.FileError)

List names in a directory without promising their order.

Pooka
import pooka/file

let result = file.list_directory("notes")
function

create_directory

src/pooka/file.pooka:191
create_directory(path: String) -> Result(Nil, FileError)
INFERREDfn(String) -> Result(Nil, pooka/file.FileError)

Create one directory; its parent must already exist.

Pooka
import pooka/file

let result = file.create_directory("notes")
function

create_directories

src/pooka/file.pooka:202
create_directories(path: String) -> Result(Nil, FileError)
INFERREDfn(String) -> Result(Nil, pooka/file.FileError)

Create missing parent directories; existing directories are accepted.

Pooka
import pooka/file

let result = file.create_directories("notes/winter")
function

remove_directory

src/pooka/file.pooka:213
remove_directory(path: String) -> Result(Nil, FileError)
INFERREDfn(String) -> Result(Nil, pooka/file.FileError)

Remove an empty directory. This does not recursively delete its contents.

Pooka
import pooka/file

let result = file.remove_directory("empty-notes")