tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

zig-files.tri (1425B)


      1 !import base as B
      2 !import io_v2 as IO
      3 !export positioned
      4 !export appended
      5 !export emptyWrite
      6 !export closed
      7 !export readerWrite
      8 !export failedAfterWrite
      9 !export unknownWithPoison
     10 
     11 positioned path = IO.io <| IO.scope (owner : do IO.require
     12   file <- IO.openUpdate owner path
     13   IO.writeSome file [97 98 99]
     14   IO.seekFile file 1
     15   content <- IO.readSome file 3
     16   length <- IO.fileSize file
     17   IO.seekFile file 10
     18   IO.resizeFile file 1
     19   IO.syncFile file
     20   position <- IO.filePosition file
     21   eof <- IO.readSome file 1
     22   IO.pure [content length position eof])
     23 appended path = IO.io <| IO.scope (owner : do IO.require
     24   file <- IO.openAppender owner path
     25   IO.writeSome file [120 121]
     26   IO.syncFile file
     27   length <- IO.fileSize file
     28   IO.bind (IO.seekFile file 0) (bad : IO.pure [length bad]))
     29 emptyWrite path = IO.io <| IO.scope (owner : IO.require (IO.openWriter owner path) (file : IO.writeSome file []))
     30 closed path = IO.io <| IO.scope (owner : do IO.require
     31   file <- IO.openReader owner path
     32   IO.close file
     33   IO.close file)
     34 readerWrite path = IO.io <| IO.scope (owner : IO.require (IO.openReader owner path) (file : IO.writeSome file [0]))
     35 failedAfterWrite path = IO.io <| IO.scope (owner : do IO.require
     36   file <- IO.openWriter owner path
     37   IO.writeSome file [42]
     38   IO.fail "preserve bytes, release descriptor")
     39 diverge seed = diverge seed
     40 unknownWithPoison seed = IO.io (IO.request "file" 99 "open-reader" (diverge seed))