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)]))))