Packages
moar
2.4.0
5.0.0
4.3.0
4.2.0
4.1.0
4.0.0
3.2.0
3.1.0
3.0.0
2.7.0
2.6.0
2.5.0
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.1
2.0.0
1.64.0
1.63.1
1.63.0
1.62.0
1.61.2
1.61.1
1.61.0
1.60.0
1.59.2
1.59.1
1.59.0
1.58.0
1.57.0
1.56.2
1.56.1
1.56.0
1.55.0
1.54.0
1.53.0
1.52.1
1.52.0
1.51.0
1.50.0
1.49.0
1.48.0
1.47.0
1.46.0
1.45.1
1.45.0
1.44.0
1.43.0
1.42.0
1.41.0
1.40.0
1.39.0
1.38.0
1.37.0
1.36.0
1.35.0
1.34.0
1.33.0
1.32.0
1.31.0
1.30.0
1.29.0
1.28.0
1.27.0
1.26.0
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.0
1.19.3
1.19.2
1.19.1
1.19.0
1.18.1
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.1
1.13.0
1.12.0
1.11.0
1.10.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.1.0
A dependency-free utility library containing 100+ useful functions.
Current section
Files
Jump to
Current section
Files
lib/difference.ex
defprotocol Moar.Difference do
# @related [test](/test/difference_test.exs)
@moduledoc """
A protocol that defines `diff/2` for finding the difference between two terms.
Includes implementations for `DateTime`, `NaiveDateTime`, and `BitString`.
"""
@fallback_to_any true
@doc """
Returns the difference between `a` and `b`.
The fallback implementation uses `Kernel.-/2` to subtract `b` from `a`.
"""
@spec diff(any(), any()) :: any()
def diff(a, b)
end
defimpl Moar.Difference, for: Any do
def diff(a, b), do: a - b
end
defimpl Moar.Difference, for: DateTime do
def diff(a, b), do: DateTime.diff(a, b, :microsecond)
end
defimpl Moar.Difference, for: NaiveDateTime do
def diff(a, b), do: NaiveDateTime.diff(a, b, :microsecond)
end
defimpl Moar.Difference, for: BitString do
def diff(a, b), do: DateTime.diff(Moar.DateTime.from_iso8601!(a), Moar.DateTime.from_iso8601!(b), :microsecond)
end