mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 13:59:08 +00:00

Implements the new `module` header syntax as described in "module and package changes" [1]: ``` module [Request, Response, req] ``` The old syntax should still work fine, and is automatically upgraded to the new one when running `roc format`. [1] https://docs.google.com/document/d/1E_77fO-44BtoBtXoVeWyGh1xN2KRTWTu8q6i25RNNx0/edit
28 lines
823 B
Text
28 lines
823 B
Text
module [line, Handle, withOpen, chunk]
|
|
|
|
import pf.Effect
|
|
import Task exposing [Task]
|
|
|
|
Handle := U64
|
|
|
|
line : Handle -> Task.Task Str *
|
|
line = \@Handle handle -> Effect.after (Effect.getFileLine handle) Task.succeed
|
|
|
|
chunk : Handle -> Task.Task (List U8) *
|
|
chunk = \@Handle handle -> Effect.after (Effect.getFileBytes handle) Task.succeed
|
|
|
|
open : Str -> Task.Task Handle *
|
|
open = \path ->
|
|
Effect.openFile path
|
|
|> Effect.map (\id -> @Handle id)
|
|
|> Effect.after Task.succeed
|
|
|
|
close : Handle -> Task.Task {} *
|
|
close = \@Handle handle -> Effect.after (Effect.closeFile handle) Task.succeed
|
|
|
|
withOpen : Str, (Handle -> Task {} a) -> Task {} a
|
|
withOpen = \path, callback ->
|
|
handle <- Task.await (open path)
|
|
result <- Task.attempt (callback handle)
|
|
{} <- Task.await (close handle)
|
|
Task.fromResult result
|