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