tricu

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

main.tri (2025B)


      1 !import arboricx_app as App
      2 !import arboricx_server as Registry
      3 !import io *
      4 !import socket as Socket
      5 !export main
      6 !export startupAction
      7 !export initializeThenServe
      8 !export initializeStore
      9 !export ensureRootDirectory
     10 !export createRootDirectory
     11 !export storeRoot
     12 !export finishStartup
     13 !export afterInitialization
     14 !export afterRootDirectory
     15 !export afterCreateDirectory
     16 !export initializeView
     17 !export serveView
     18 !export serveRegistry
     19 !export createSocket
     20 !export afterSocketResult
     21 
     22 -- Preserve the actual application's executable tree, rather than rebuilding an
     23 -- observationally equivalent main. This bundle adds an inspection vocabulary.
     24 main = App.main
     25 
     26 -- Ordinary named values recover these exact trees in the startup spine.
     27 storeRoot = "./store"
     28 createRootDirectory = createDirectory storeRoot
     29 ensureRootDirectory = Registry.ensureDir storeRoot
     30 initializeStore = Registry.ensureStore storeRoot
     31 
     32 -- Structural projections, NOT applications of the extracted continuations.
     33 -- These helpers assume the current v1 envelope/Bind layouts. The acceptance
     34 -- harness checks their roles against the actual compiled server.
     35 rightPayload (t _ (t _ value)) = value
     36 rightPayload _ = t
     37 leftPayload (t _ (t value _)) = value
     38 leftPayload _ = t
     39 
     40 startupAction = rightPayload main
     41 initializeThenServe = leftPayload startupAction
     42 finishStartup = rightPayload startupAction
     43 -- Project from the actual main, not a separately recompiled equivalent wrapper.
     44 afterInitialization = rightPayload initializeThenServe
     45 afterRootDirectory = rightPayload initializeStore
     46 afterCreateDirectory = rightPayload ensureRootDirectory
     47 
     48 -- Separate materialized views: useful for inspection, not evidence that the
     49 -- main inspector followed or executed its opaque continuations. Running these
     50 -- exports as IO would perform effects; inspection does not.
     51 initializeView = io initializeStore
     52 serveRegistry = Registry.arboricxServer storeRoot "0.0.0.0" 8080
     53 serveView = io serveRegistry
     54 createSocket = Socket.socket
     55 afterSocketResult = rightPayload serveRegistry