main.bend source
main.bend on the hub · documented module
import Baseimport 0xd684886d10b431b9dce6c3b2d1ef1980/main.bend as Vtype Error is Data: InvalidId{} Exhausted{}type Table is Type: InternTable{names: V.Vec<String>, forward: Map<&2,Maybe<&2,U32>>}def Table.bounded(limit: U32) -> Table: InternTable{V.Vec.bounded(String,limit),Map.new(&2,Maybe<&2,U32>)}def Table.new() -> Table: InternTable{V.Vec.new(String),Map.new(&2,Maybe<&2,U32>)}def metadata(m: Map<&2,Maybe<&2,U32>>, r: V.Vec<String> & U32) -> Table & U32: (v,n) = r (InternTable{v,m},n)def Table.length(t: Table) -> Table & U32: match t: case InternTable{v,m}: metadata(m,V.Vec.length(String,v))def Table.limit(t: Table) -> Table & U32: match t: case InternTable{v,m}: metadata(m,V.Vec.limit(String,v))def found(v: V.Vec<String>, r: Map<&2,Maybe<&2,U32>> & Maybe<&2,U32>) -> Table & Maybe<&2,U32>: (m,id) = r (InternTable{v,m},id)def Table.find(t: Table, name: String) -> Table & Maybe<&2,U32>: match t: case InternTable{v,m}: found(v,Map.get(Maybe<&2,U32>,None{},m,name))def inserted(m: Map<&2,Maybe<&2,U32>>, name: String, +id: U32, pair: V.Vec<String> & Result<V.Error,Unit>) -> Table & Result<Error,U32>: (v,result) = pair match result: case Fail{error}: (InternTable{v,m},Fail{Exhausted{}}) case Done{unit}: (InternTable{v,Map.set(&2,Maybe<&2,U32>,m,name,Some{id})},Done{id})def append_name(m: Map<&2,Maybe<&2,U32>>, +name: String, pair: V.Vec<String> & U32) -> Table & Result<Error,U32>: (v,id) = pair inserted(m,name,id,V.Vec.push(String,v,name))def intern_found(v: V.Vec<String>, name: String, pair: Map<&2,Maybe<&2,U32>> & Maybe<&2,U32>) -> Table & Result<Error,U32>: (m,lookup) = pair match lookup: case Some{id}: (InternTable{v,m},Done{id}) case None{}: append_name(m,name,V.Vec.length(String,v))def Table.intern(t: Table, +name: String) -> Table & Result<Error,U32>: match t: case InternTable{v,m}: intern_found(v,name,Map.get(Maybe<&2,U32>,None{},m,name))def resolved(m: Map<&2,Maybe<&2,U32>>, pair: V.Vec<String> & Result<V.Error,String>) -> Table & Result<Error,String>: (v,result) = pair match result: case Fail{error}: (InternTable{v,m},Fail{InvalidId{}}) case Done{name}: (InternTable{v,m},Done{name})def Table.resolve(t: Table, id: U32) -> Table & Result<Error,String>: match t: case InternTable{v,m}: resolved(m,V.Vec.get(String,v,id))