Ergo.Combinators.optional

You're seeing just the function optional, go back to Ergo.Combinators module for more information.
Link to this function

optional(parser, opts \\ [])

The optional/2 parser takes a parser and attempts to match it and succeeds whether or not it can.

Examples

iex> alias Ergo.Context
iex> import Ergo.{Terminals, Combinators}
iex> ctx = Ergo.parse(optional(literal("Hello")), "Hello World")
iex> assert %Context{status: :ok, ast: "Hello", input: " World", index: 5, col: 6} = ctx

In this example we deliberately ensure that the Context ast is not nil
iex> alias Ergo.{Context, Parser}
iex> import Ergo.{Terminals, Combinators}
iex> ctx = Context.new(" World", ast: [])
iex> parser = optional(literal("Hello"))
iex> new_context = Parser.invoke(ctx, parser)
iex> assert %Context{status: :ok, ast: nil, input: " World", index: 0, col: 1} = new_context