tricu

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

native-cli.tri (2216B)


      1 !import base as B
      2 !import io_v2 as IO
      3 !export compile
      4 !export pure
      5 !export write
      6 !export unsupported
      7 !export inspect
      8 !export capabilities
      9 !export groups
     10 !export failed
     11 !export cancelled
     12 !export divergent
     13 !export legacy
     14 !export future
     15 
     16 pure = IO.io (IO.pure 42)
     17 write path = IO.io <| IO.scope (owner : IO.require (IO.openWriter owner path) (writer :
     18   IO.require (IO.writeSome writer [0 255 65]) IO.pure))
     19 diverge seed = diverge seed
     20 unsupported seed = IO.io <| IO.bind (IO.request "tcp" 1 "connect" (diverge seed)) (reply : case reply of
     21   (t, (["unsupported" "tcp/connect" _ "none"], t)) = IO.pure 1
     22   _ = IO.fail "invalid unsupported reply")
     23 inspect seed = IO.io <| IO.require (IO.inspect (IO.request "file" 1 "open-reader" (diverge seed))) (reply : case reply of
     24   ["facility" "file" 1 "open-reader" "available"] = IO.pure 1
     25   _ = IO.fail "invalid inspection")
     26 find key rows = case rows of
     27   [[name value] | rest] = case name of
     28     ^key = value
     29     _ = find key rest
     30   _ = t
     31 capabilities = IO.io <| IO.require IO.capabilities (rows : case [(find "backend" rows) (find "authority" rows) (find "io-version" rows)] of
     32   ["zig-native" "os-process" 2] = IO.pure 1
     33   _ = IO.fail "invalid capabilities")
     34 failed seed = IO.io (IO.fail (diverge seed))
     35 cancelled seed = IO.io (IO.cancelled (diverge seed))
     36 divergent seed = IO.io (diverge seed)
     37 legacy = B.pair "tricuIO" (B.pair 1 (B.pair 0 23))
     38 future seed = B.pair "tricuIO" (B.pair 3 (diverge seed))
     39 
     40 compile worker workspace root identity name = IO.io <| IO.require (worker workspace root identity name)
     41   (built : IO.pure (B.fst built))
     42 
     43 groups = IO.io <| IO.require IO.capabilities (rows : case find "groups" rows of
     44   [["runtime" 1 ["capabilities" "inspect"]]
     45    ["resource" 1 ["close"]]
     46    ["stream" 1 ["read" "write"]]
     47    ["file" 1 ["open-reader" "open-writer" "open-appender" "open-update" "seek" "position" "size" "resize" "sync"]]
     48    ["path" 1 ["stat" "lstat" "remove-file" "rename"]]
     49    ["directory" 1 ["create" "remove" "sync"]]
     50    ["stage" 1 ["open" "seal" "publish"]]
     51    ["digest" 1 ["open" "update" "finish"]]
     52    ["indexed-tree" 1 ["read" "hash" "write" "verify"]]
     53    ["utf8" 1 ["encode" "decode"]]] = IO.pure 1
     54   _ = IO.fail "incorrect advertised groups")