a4697ab517c4fdb2544a03502d310b273a2eda1a81ed14a163b3e30372e5f2fc.tri (980B)
1 !import base as B 2 !import io as IO 3 !import io_text as Text 4 !export main 5 !export worker 6 -- Structured children return work records; the parent serializes their output. 7 -- Task completion does not imply deterministic scheduling or atomic shared writes. 8 worker message = IO.require IO.yield (_ : IO.pure [(B.append "working: " message) (B.append message "-result")]) 9 consume writer [_ ticket] = IO.require (IO.join ticket) (outcome : case outcome of 10 ["completed" [message value]] = IO.require (Text.writeText writer (B.append message "\n")) (_ : IO.pure value) 11 _ = IO.fail outcome) 12 consume _ _ = IO.fail "Invalid spawn reply" 13 main = IO.io (IO.scope (_ : do IO.require 14 first <- IO.spawn 0 1 [] (_ : worker "job1") 15 second <- IO.spawn 0 1 [] (_ : worker "job2") 16 writer <- IO.stdout 17 IO.bind (consume writer first) (a : IO.bind (consume writer second) (b : 18 IO.require (Text.writeText writer (B.append "Got " (B.append a (B.append " and " (B.append b "\n"))))) IO.pure))))