tricu

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

zig-digest.tri (1002B)


      1 !import io_v2 as IO
      2 !export hash
      3 !export lifecycle
      4 !export unsupported
      5 !export transferred
      6 
      7 hash bytes = IO.io <| IO.scope (owner : do IO.require
      8   digest <- IO.openDigest owner "sha256"
      9   IO.updateDigest digest bytes
     10   IO.require (IO.finishDigest digest) IO.pure)
     11 lifecycle = IO.io <| IO.scope (owner : do IO.require
     12   digest <- IO.openDigest owner "sha256"
     13   value <- IO.finishDigest digest
     14   IO.bind (IO.finishDigest digest) (again :
     15     IO.bind (IO.updateDigest digest [0]) (update :
     16       IO.pure [value again update])))
     17 unsupported algorithm = IO.io <| IO.scope (owner : IO.openDigest owner algorithm)
     18 child [digest] = do IO.require
     19   IO.updateDigest digest [97 98 99]
     20   IO.require (IO.finishDigest digest) IO.pure
     21 child _ = IO.fail "invalid transfer"
     22 transferred = IO.io <| IO.scope (owner : do IO.require
     23   digest <- IO.openDigest owner "sha256"
     24   spawned <- IO.spawn 0 1 [digest] child
     25   case spawned of
     26     [task ticket] = IO.require (IO.join ticket) IO.pure
     27     _ = IO.fail "invalid spawn")