Kernel.in

You're seeing just the macro in, go back to Kernel module for more information.

Membership operator. Checks if the element on the left-hand side is a member of the collection on the right-hand side.

Examples

iex> x = 1
iex> x in [1, 2, 3]
true

This operator (which is a macro) simply translates to a call to Enum.member?/2. The example above would translate to:

Enum.member?([1, 2, 3], x)

Elixir also supports left not in right, which evaluates to not(left in right):

iex> x = 1
iex> x not in [1, 2, 3]
false

Guards

The in/2 operator (as well as not in) can be used in guard clauses as long as the right-hand side is a range or a list. In such cases, Elixir will expand the operator to a valid guard expression. For example:

when x in [1, 2, 3]

translates to:

when x === 1 or x === 2 or x === 3

When using ranges:

when x in 1..3

translates to:

when is_integer(x) and x >= 1 and x <= 3

Note that only integers can be considered inside a range by in.

AST considerations

left not in right is parsed by the compiler into the AST:

{:not, _, [{:in, _, [left, right]}]}

This is the same AST as not(left in right).

Additionally, Macro.to_string/2 and Code.format_string!/2 will translate all occurrences of this AST to left not in right.