Skip to content

Latest commit

 

History

History
119 lines (96 loc) · 6.04 KB

README.md

File metadata and controls

119 lines (96 loc) · 6.04 KB

Helpers for defining Elixir operators

Build Status Inline docs Deps Status hex.pm version API Docs license

Quick Start

def deps do
  [{:operator, "~> 0.2.0"}]
end

defmodule MyModule do
  use Operator

  @operator :~>
  # ...
end

Summary

Helpers for defining operator aliases for functions

Operators can be hard to follow, especially with the limited number available in Elixir. Always having a named function backing an operator makes it easy to fall back to the named version. Named fall backs are also very useful for piping (|>).

defmodule Example do
  use Operator

  @doc "Divide two numbers"
  @operator :~>
  def divide(a, b), do: a / b

  @doc "Multiply two numbers"
  @operator :<~>
  def multiply(a, b), do: a * b
end

import Example

divide(10, 5)
#=> 5

10 ~> 2
#=> 5

multiply(10, 2)
#=> 20

10 <~> 2
#=> 20

Operator Reference

Elixir has a limited number of available operators. Many of them are already used by Kernel (the standard lib). You can overwrite the standard definition by excluding it from the import of Kernel, but this is not advisable (except in very exceptional cases), because it can be very confusing for users.

Some operators have multiple arities, and can be defined separately. Some binary operators associate to the left, and others to the right. Please refer to the table below.

Operator Unary Left-associated Binary Right-associated Binary
! ✔️
@ ✔️
. ✔️
.. ✔️
+ ✔️ ✔️
++ ✔️
- ✔️ ✔️
-- ✔️
* ✔️
/ ✔️
^ ✔️
^^^ ✔️
~~~ ✔️
& ✔️
&& ✔️
&&& ✔️
<- ✔️
\\ ✔️
| ✔️
|| ✔️
||| ✔️
= ✔️
=~ ✔️
== ✔️
=== ✔️
!= ✔️
!== ✔️
< ✔️
> ✔️
<> ✔️
<= ✔️
>= ✔️
|> ✔️
<|> ✔️
<~> ✔️
~> ✔️
~>> ✔️
>>> ✔️
<~ ✔️
<<~ ✔️
<<< ✔️
when ✔️
in ✔️
and ✔️
or ✔️
not ✔️