-module(gleameter). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([add/2, subtract/2, multiply/2, divide/2, product/2, scale/2, over/2, from/1, from_int/1, unwrap/1, unwrap_int/1]). -export_type([quantity/2, product/2, rate/2, unitless/0]). -type quantity(FTG, FTH) :: {quantity, FTG} | {gleam_phantom, FTH}. -type product(FTI, FTJ) :: any() | {gleam_phantom, FTI, FTJ}. -type rate(FTK, FTL) :: any() | {gleam_phantom, FTK, FTL}. -type unitless() :: any(). -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 23). -spec add(quantity(float(), FTW), quantity(float(), FTW)) -> quantity(float(), FTW). add(Lhs, Rhs) -> {quantity, erlang:element(2, Lhs) + erlang:element(2, Rhs)}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 30). -spec subtract(quantity(float(), FUD), quantity(float(), FUD)) -> quantity(float(), FUD). subtract(Lhs, Rhs) -> {quantity, erlang:element(2, Lhs) - erlang:element(2, Rhs)}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 37). -spec multiply(quantity(float(), FUK), quantity(float(), FUK)) -> quantity(float(), FUK). multiply(Lhs, Rhs) -> {quantity, erlang:element(2, Lhs) * erlang:element(2, Rhs)}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 44). -spec divide(quantity(float(), FUR), quantity(float(), FUR)) -> quantity(float(), FUR). divide(Lhs, Rhs) -> {quantity, case erlang:element(2, Rhs) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> erlang:element(2, Lhs) / Gleam@denominator end}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 51). -spec product(quantity(float(), FUY), quantity(float(), FVB)) -> quantity(float(), product(FUY, FVB)). product(Lhs, Rhs) -> {quantity, erlang:element(2, Lhs) * erlang:element(2, Rhs)}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 58). -spec scale(float(), quantity(float(), FVI)) -> quantity(float(), FVI). scale(Lhs, Rhs) -> {quantity, Lhs * erlang:element(2, Rhs)}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 62). -spec over(quantity(float(), FVN), quantity(float(), FVQ)) -> quantity(float(), rate(FVN, FVQ)). over(Lhs, Rhs) -> {quantity, case erlang:element(2, Rhs) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> erlang:element(2, Lhs) / Gleam@denominator end}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 69). -spec from(float()) -> quantity(float(), unitless()). from(Value) -> {quantity, Value}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 73). -spec from_int(integer()) -> quantity(integer(), unitless()). from_int(Value) -> {quantity, Value}. -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 77). -spec unwrap(quantity(float(), any())) -> float(). unwrap(Value) -> erlang:element(2, Value). -file("/home/theonlytails/IdeaProjects/gleameter/src/gleameter.gleam", 81). -spec unwrap_int(quantity(integer(), any())) -> integer(). unwrap_int(Value) -> erlang:element(2, Value).