Packages

An implementation of the International System of Units (SI) in Gleam

Current section

Files

Jump to
gleameter src gleameter.erl
Raw

src/gleameter.erl

-module(gleameter).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export(['of'/2, unit/8, scale/2, time/2, mass/2, length/2, temperature/2, luminosity/2, current/2, amount/2, times/2, divide/2, inverse/1]).
-export_type([value/0, unit/0]).
-type value() :: {value, float(), unit()}.
-type unit() :: {unit,
float(),
float(),
float(),
float(),
float(),
float(),
float(),
float()}.
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 5).
-spec 'of'(float(), unit()) -> value().
'of'(Value, Unit) ->
{value, Value, Unit}.
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 33).
-spec unit(
float(),
float(),
float(),
float(),
float(),
float(),
float(),
float()
) -> unit().
unit(Scale, Time, Mass, Length, Temperature, Luminosity, Current, Amount) ->
{unit, Scale, Time, Mass, Length, Temperature, Luminosity, Current, Amount}.
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 55).
-spec scale(unit(), float()) -> unit().
scale(From, Scale) ->
erlang:setelement(2, From, Scale).
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 59).
-spec time(unit(), float()) -> unit().
time(From, Time) ->
erlang:setelement(3, From, Time).
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 63).
-spec mass(unit(), float()) -> unit().
mass(From, Mass) ->
erlang:setelement(4, From, Mass).
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 67).
-spec length(unit(), float()) -> unit().
length(From, Length) ->
erlang:setelement(5, From, Length).
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 71).
-spec temperature(unit(), float()) -> unit().
temperature(From, Temperature) ->
erlang:setelement(6, From, Temperature).
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 75).
-spec luminosity(unit(), float()) -> unit().
luminosity(From, Luminosity) ->
erlang:setelement(7, From, Luminosity).
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 79).
-spec current(unit(), float()) -> unit().
current(From, Current) ->
erlang:setelement(8, From, Current).
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 83).
-spec amount(unit(), float()) -> unit().
amount(From, Amount) ->
erlang:setelement(9, From, Amount).
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 87).
-spec times(unit(), unit()) -> unit().
times(Lhs, Rhs) ->
{unit,
erlang:element(2, Lhs) * erlang:element(2, Rhs),
erlang:element(3, Lhs) + erlang:element(3, Rhs),
erlang:element(4, Lhs) + erlang:element(4, Rhs),
erlang:element(5, Lhs) + erlang:element(5, Rhs),
erlang:element(6, Lhs) + erlang:element(6, Rhs),
erlang:element(7, Lhs) + erlang:element(7, Rhs),
erlang:element(8, Lhs) + erlang:element(8, Rhs),
erlang:element(9, Lhs) + erlang:element(9, Rhs)}.
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 100).
-spec divide(unit(), unit()) -> unit().
divide(Lhs, Rhs) ->
{unit, case erlang:element(2, Rhs) of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> erlang:element(2, Lhs) / Gleam@denominator
end, erlang:element(3, Lhs) - erlang:element(3, Rhs), erlang:element(
4,
Lhs
)
- erlang:element(4, Rhs), erlang:element(5, Lhs) - erlang:element(
5,
Rhs
), erlang:element(6, Lhs) - erlang:element(6, Rhs), erlang:element(
7,
Lhs
)
- erlang:element(7, Rhs), erlang:element(8, Lhs) - erlang:element(
8,
Rhs
), erlang:element(9, Lhs) - erlang:element(9, Rhs)}.
-file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 113).
-spec inverse(unit()) -> unit().
inverse(Unit) ->
{unit,
erlang:element(2, Unit),
erlang:element(3, Unit) * -1.0,
erlang:element(4, Unit) * -1.0,
erlang:element(5, Unit) * -1.0,
erlang:element(6, Unit) * -1.0,
erlang:element(7, Unit) * -1.0,
erlang:element(8, Unit) * -1.0,
erlang:element(9, Unit) * -1.0}.