# `Cldr.List.Pattern`
[🔗](https://github.com/elixir-cldr/cldr_lists/blob/v2.12.2/lib/cldr/pattern.ex#L1)

A list pattern drives list formatting and it defines how to combine
list elements at the beggining, in the middle and at the end of
a list. It also has a special pattern used when the list contains
only two elements.

# `pattern`

```elixir
@type pattern() :: [non_neg_integer() | String.t(), ...]
```

# `t`

```elixir
@type t() :: %Cldr.List.Pattern{
  end: pattern(),
  middle: pattern(),
  start: pattern(),
  two: pattern()
}
```

# `new`

Creates a new list format.

A list pattern consists of four string
templates into which list elements are interpolated
when formatting.

The four templates are:

* `:start` used to format the first two
  list elements.

* `:middle` is used to format elements in
  the middle of the list.

* `:end` is used to format the last two
  elements in the list.

* `:two` is used to format a list if
  it contains only two elements.

Only the `:start` option is required. It
will be used as the default for any other
option that is not provided.

## Arguments

* `options` is a keyword list of options.

## Options

* `:start` is a pattern template as a string.
  This option is required.

* `:middle` is a pattern template as a string.

* `:end` is a pattern template as a string.

* `:two` is a pattern template as a string.

## Returns

`{:ok, pattern}` or

`{:error, reason}`

## Pattern template

A pattern template is a string that contains
two placeholders denoted by `{0}` and `{1}`.

## Example

    iex> Cldr.List.Pattern.new(
    ...>   start: "{0}, {1}",
    ...>   middle: "{0}, {1}",
    ...>   end: "{0} and {1}",
    ...>   two: "{0} and {1}"
    ...>  )
    {
      :ok,
      %Cldr.List.Pattern{
        end: [0, " and ", 1],
        middle: [0, ", ", 1],
        start: [0, ", ", 1],
        two: [0, " and ", 1]
      }
    }

---

*Consult [api-reference.md](api-reference.md) for complete listing*
