View Source Funx.Eq protocol (funx v0.1.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

With a custom implementation for a Funx.Monad.Maybe type:

iex> Funx.Eq.eq?(Funx.Monad.Maybe.just(3), Funx.Monad.Maybe.just(3))
true

iex> Funx.Eq.eq?(Funx.Monad.Maybe.just(3), Funx.Monad.Maybe.just(5))
false

iex> Funx.Eq.eq?(Funx.Monad.Maybe.nothing(), Funx.Monad.Maybe.nothing())
true

iex> Funx.Eq.eq?(Funx.Monad.Maybe.nothing(), Funx.Monad.Maybe.just(5))
false

Checking inequality with not_eq?/2:

iex> Funx.Eq.not_eq?(Funx.Monad.Maybe.just(3), Funx.Monad.Maybe.just(3))
false

iex> Funx.Eq.not_eq?(Funx.Monad.Maybe.just(3), Funx.Monad.Maybe.just(5))
true

iex> Funx.Eq.not_eq?(Funx.Monad.Maybe.nothing(), Funx.Monad.Maybe.nothing())
false

iex> Funx.Eq.not_eq?(Funx.Monad.Maybe.nothing(), Funx.Monad.Maybe.just(5))
true

Summary

Types

t()

All the types that implement this protocol.

Functions

Returns true if a is equal to b, otherwise returns false.

Returns true if a is not equal to b, otherwise returns false.

Types

@type t() :: term()

All the types that implement this protocol.

Functions

Returns true if a is equal to b, otherwise returns false.

Examples

iex> Funx.Eq.eq?(1, 1)
true

iex> Funx.Eq.eq?(1, 2)
false

Returns true if a is not equal to b, otherwise returns false.

Examples

iex> Funx.Eq.not_eq?(1, 1)
false

iex> Funx.Eq.not_eq?(1, 2)
true