tricu

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

zig-stages.tri (1299B)


      1 !import io_v2 as IO
      2 !export publish
      3 !export failureAfterPublication
      4 !export invalidDestination
      5 !export crossDevice
      6 
      7 prepare owner directory = IO.require (IO.openStage owner directory) (stage : do IO.require
      8   IO.writeAll stage [97 98 99]
      9   IO.sealStage stage
     10   IO.pure stage)
     11 publish directory destination replace = IO.io <| IO.scope (owner : IO.bind (prepare owner directory) (stage : case replace of
     12   0 = IO.publishNew stage destination
     13   _ = IO.publishReplace stage destination))
     14 failureAfterPublication directory destination = IO.io <| IO.scope (owner : IO.bind (prepare owner directory) (stage : do IO.require
     15   IO.publishReplace stage destination
     16   IO.fail "do not roll back publication"))
     17 invalidDestination directory destination = IO.io <| IO.scope (owner : IO.bind (prepare owner directory) (stage :
     18   IO.bind (IO.publishNew stage destination) (first :
     19     IO.bind (IO.publishNew stage destination) (second : IO.pure [first second]))))
     20 problem (t, ([category _ _ progress], t)) = [category progress]
     21 problem _ = ["unexpected"]
     22 crossDevice directory destination = IO.io <| IO.scope (owner : IO.bind (prepare owner directory) (stage :
     23   IO.bind (IO.publishNew stage destination) (first :
     24     IO.bind (IO.publishNew stage destination) (second : IO.pure [(problem first) (problem second)]))))