tricu

A lazy functional language based on Tree Calculus
Log | Files | Refs | README | LICENSE

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