state.tri (696B)
1 !import base as B 2 !import io as IO 3 !import io_text as Text 4 !export main 5 !export runState 6 -- A sequential state machine passes its state explicitly. There is no implicit 7 -- host get/put slot and no claim of a mutable cell shared across child tasks. 8 line writer state = Text.writeText writer (B.append "state: " (B.append state "\n")) 9 runState writer "idle" = IO.require (line writer "idle") (_ : runState writer "running") 10 runState writer "running" = IO.require (line writer "running") (_ : runState writer "done") 11 runState writer "done" = IO.require (line writer "done") (_ : IO.pure t) 12 runState _ _ = IO.fail "Unknown state" 13 main = IO.io (IO.require IO.stdout (writer : runState writer "idle"))