tricu

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

prefix-lines.scp (1652B)


      1 -- Extract payloads from LF-delimited tagged log lines, retaining order.
      2 -- Configuration input: exact prefix bytes (no trimming); state is ignored.
      3 -- Runtime input: whole-file bytes. Exact prefix-only lines yield present "";
      4 -- nonmatching lines are skipped. Empty prefix keeps every line unchanged.
      5 -- No CRLF decoding, streaming or termination guarantee is implied.
      6 !import makeWorker as Make
      7 !import prepend as Prepend
      8 !import fold as Fold
      9 !import reverse as Reverse
     10 !import splitLines as Split
     11 !import stripPrefix as Prefix
     12 !import mapMaybe as Collect
     13 !export configurePrefix
     14 
     15 consumer prefixLines
     16   bytes @ (splitter, collector) =>
     17     call splitter bytes as lines in call collector lines as suffixes in suffixes
     18 
     19 -- Input: explicit constructor worker; result: splitter worker.
     20 consumer splitter
     21   make @ _ =>
     22     call make (leaf, Prepend.prepend) as prepender in
     23     call make (leaf, Fold.fold) as folder in
     24     call make ((folder, prepender), Reverse.reverse) as reverser in
     25       call make (([], reverser), Split.splitLines) as worker in worker
     26 
     27 -- Input: prefix and constructor worker; no worker conversion is implicit.
     28 consumer assemble
     29   (prefix, make) @ _ =>
     30     call make (leaf, Self.splitter) as buildSplit in
     31     call buildSplit make as split in
     32     call make (prefix, Prefix.stripPrefix) as mapper in
     33     call make (mapper, Collect.mapMaybe) as collector in
     34     call make ((split, collector), Self.prefixLines) as worker in
     35       [("prefixLines", worker) | []]
     36 
     37 consumer configurePrefix
     38   prefix @ _ =>
     39     call ("scp-worker.v1", (leaf, Self.assemble))
     40       (prefix, ("scp-worker.v1", (leaf, Make.makeWorker))) as workers in workers