import Base import ./main.bend as S import ./types.bend as T def text_pair(pair: S.Source & String) -> Result: (s,t) = pair Done{t} def text(r: Result) -> Result: match r: case Fail{e}: Fail{e} case Done{s}: text_pair(S.Source.text(s)) def file_pair(pair: S.Source & U32) -> Result: (s,n) = pair Done{n} def file(r: Result) -> Result: match r: case Fail{e}: Fail{e} case Done{s}: file_pair(S.Source.file(s)) def length(r: Result) -> Result: match r: case Fail{e}: Fail{e} case Done{s}: file_pair(S.Source.length(s)) def lines(r: Result) -> Result: match r: case Fail{e}: Fail{e} case Done{s}: file_pair(S.Source.line_count(s)) def scalar_pair(pair: S.Source & U32) -> U32: (s,n) = pair n def size(s: S.Source) -> U32: scalar_pair(S.Source.length(s)) def identity(s: S.Source) -> U32: scalar_pair(S.Source.file(s))