# frozen_string_literal: true module Farseer class Many def initialize(parser) @parser = parser freeze end def parse(input) @parser.parse(input) .bind { |r| helper(r.rest, [r.token]) } end def helper(input, tokens = []) @parser.parse(input) .bind { |r| helper(r.rest, [*tokens, r.token]) } .map_none { Result.new(tokens.join, input) } end end end