mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 13:59:08 +00:00
34 lines
888 B
Text
34 lines
888 B
Text
module [line, withOpen, chunk, Handle]
|
|
|
|
import pf.PlatformTasks
|
|
|
|
Handle := U64
|
|
|
|
line : Handle -> Task Str *
|
|
line = \@Handle handle ->
|
|
PlatformTasks.getFileLine handle
|
|
|> Task.mapErr \_ -> crash "unreachable File.line"
|
|
|
|
chunk : Handle -> Task (List U8) *
|
|
chunk = \@Handle handle ->
|
|
PlatformTasks.getFileBytes handle
|
|
|> Task.mapErr \_ -> crash "unreachable File.chunk"
|
|
|
|
open : Str -> Task Handle *
|
|
open = \path ->
|
|
PlatformTasks.openFile path
|
|
|> Task.mapErr \_ -> crash "unreachable File.open"
|
|
|> Task.map @Handle
|
|
|
|
close : Handle -> Task.Task {} *
|
|
close = \@Handle handle ->
|
|
PlatformTasks.closeFile handle
|
|
|> Task.mapErr \_ -> crash "unreachable File.close"
|
|
|
|
withOpen : Str, (Handle -> Task {} a) -> Task {} a
|
|
withOpen = \path, callback ->
|
|
handle = open! path
|
|
result = callback handle |> Task.result!
|
|
close! handle
|
|
|
|
Task.fromResult result
|