import Base import ./LAWS.bend as Laws # pure(A,x,s) computes to Some{(x,s)}. def Laws.pure_id(A, x, s): {==} # fail(A,s) computes to None. def Laws.fail_none(A, s): {==} # map(id, pure(7,s)) computes to Some{(7,s)}. def Laws.map_id_pure(s): {==} # or(fail, char(c), s) computes to char(c,s). def Laws.or_fail_left_char(c, s): {==} # or(char('a'), fail, "a") computes to Some{('a',"")}. def Laws.or_fail_right_char_hit(): {==} # char('a', SCon{'a',t}) computes to Some{('a',t)}. def Laws.char_match(t): {==} # char(c, SNil) computes to None. def Laws.char_fail_empty(c): {==} # char('a', "b") computes to None. def Laws.char_fail_mismatch(): {==} # string(SNil, s) — starts_with needs a case split on s. def Laws.string_empty(s): match s: case SNil{}: {==} case SCon{h, t}: {==} def Laws.map_fail(s): {==} def Laws.string_lit_hit(): {==} def Laws.string_lit_miss(): {==}