The expected definitions (which are by no means required) in parser combinator speak are: * `p ~>> f` = `bind(p, f)` * `p1 ~> p2` = `pair_right(p1, p2)` * `p1 <~ p2` = `pair_left(p1, p2)` * `p1 <~> p2` = `pair_both(p1, p2)` * `p |~> f` = `map(p, f)` * `1p <|> p2` = `either(p1, p2)`