defmodule SI do @moduledoc """ Documentation for SI. """ alias SI.Quantity alias SI.Unit alias Quantity.{Mass, AmountOfSubstance, Time, ThermodynamicTemperature, LuminousIntensity, Length, ElectricCurrent} alias Unit.{Gram, Mole, Ampere, Meter, Candela, Kelvin, Second} require Unit Module.register_attribute(__MODULE__, :units, accumulate: true) @basic_quantities [ {Mass.name_atom(), Mass}, {AmountOfSubstance.name_atom(), AmountOfSubstance}, {Time.name_atom(), Time}, {ThermodynamicTemperature.name_atom(), ThermodynamicTemperature}, {LuminousIntensity.name_atom(), LuminousIntensity}, {Length.name_atom(), Length}, {ElectricCurrent.name_atom(), ElectricCurrent} ] # === UNITS === @units {Mass.name_atom(), Unit.generate_module_variations(Gram)} Unit.compile_derivative_units(Gram) Unit.compile_variation_conversions(Gram) @units {AmountOfSubstance.name_atom(), Unit.generate_module_variations(Mole)} Unit.compile_derivative_units(Mole) Unit.compile_variation_conversions(Mole) @units {ElectricCurrent.name_atom(), Unit.generate_module_variations(Ampere)} Unit.compile_derivative_units(Ampere) Unit.compile_variation_conversions(Ampere) @units {Length.name_atom(), Unit.generate_module_variations(Meter)} Unit.compile_derivative_units(Meter) Unit.compile_variation_conversions(Meter) @units {LuminousIntensity.name_atom(), Unit.generate_module_variations(Candela)} Unit.compile_derivative_units(Candela) Unit.compile_variation_conversions(Candela) @units {ThermodynamicTemperature.name_atom(), Unit.generate_module_variations(Kelvin)} Unit.compile_derivative_units(Kelvin) Unit.compile_variation_conversions(Kelvin) @units {Time.name_atom(), Unit.generate_module_variations(Second)} Unit.compile_derivative_units(Second) Unit.compile_variation_conversions(Second) # === FUNCTIONS === def quantities(), do: @basic_quantities def units(), do: @units end