Skip to content

witchcrafters/operator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 ✔️

About

Helpers for defining Elixir operators

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published