tricu

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

4dcb43187b3cbd168fcb3ad5269be3e96257aa30773bca933e6cf37dfbdee066.tri (795B)


      1 !import base as B
      2 !import handlers as H
      3 !import io_v2 as IO
      4 !import io_v2_text as Text
      5 !export main
      6 -- Lexical application configuration, NOT the OS environment or a sandbox.
      7 ask = H.request "configuration" "ask" t
      8 reader value "ask" t = H.pure value
      9 reader _ operation argument = H.forward "configuration" operation argument
     10 line message = H.liftIO (IO.require IO.stdout (writer :
     11   IO.require (Text.writeText writer (B.append message "\n")) IO.pure))
     12 inside = do H.bind
     13   value <- ask
     14   line (B.append "working in env: " value)
     15   H.pure "inside-done"
     16 main = IO.io (H.runIOV2 (H.handle "configuration" (reader "outer") (do H.bind
     17   value <- H.handle "configuration" (reader "demo") inside
     18   line (B.append "local returned: " value)
     19   outside <- ask
     20   line (B.append "outside env: " outside))))