# Funx.Eq
```elixir
Mix.install([
{:funx, "0.3.0"}
])
```
The `Funx.Eq` protocol defines an equality function, `eq?/2`, for comparing two values,
and its complement, `not_eq?/2`, for checking inequality.
Types that implement this protocol can define custom equality logic, allowing for
domain-specific comparisons.
## Fallback
The protocol uses `@fallback_to_any true`, meaning that if a specific type does not
implement `Funx.Eq`, it falls back to the default implementation for `Any`, which
uses Elixir's built-in equality operator (`==`).
## Examples
```elixir
import Funx.Eq
```
With a custom implementation for a `Funx.Monad.Maybe` type:
```elixir
eq?(Funx.Monad.Maybe.just(3), Funx.Monad.Maybe.just(3))
```
```elixir
eq?(Funx.Monad.Maybe.just(3), Funx.Monad.Maybe.just(5))
```
```elixir
eq?(Funx.Monad.Maybe.nothing(), Funx.Monad.Maybe.nothing())
```
```elixir
eq?(Funx.Monad.Maybe.nothing(), Funx.Monad.Maybe.just(5))
```
Checking inequality with `not_eq?/2`:
```elixir
not_eq?(Funx.Monad.Maybe.just(3), Funx.Monad.Maybe.just(3))
```
```elixir
not_eq?(Funx.Monad.Maybe.just(3), Funx.Monad.Maybe.just(5))
```
```elixir
not_eq?(Funx.Monad.Maybe.nothing(), Funx.Monad.Maybe.nothing())
```
```elixir
not_eq?(Funx.Monad.Maybe.nothing(), Funx.Monad.Maybe.just(5))
```
## eq?/2
Returns `true` if `a` is equal to `b`, otherwise returns `false`.
### Examples
```elixir
eq?(1, 1)
```
```elixir
eq?(1, 2)
```
## not_eq?/2
Returns `true` if `a` is not equal to `b`, otherwise returns `false`.
### Examples
```elixir
not_eq?(1, 1)
```
```elixir
not_eq?(1, 2)
```