defmodule KitchenCalculator do def get_volume(volume_pair) do elem(volume_pair, 1) end def to_milliliter(volume_pair) do volume = get_volume(volume_pair) case elem(volume_pair, 0) do :milliliter -> volume :fluid_ounce -> 30 * volume :cup -> 240 * volume :teaspoon -> 5 * volume :tablespoon -> 15 * volume _ -> -1 end end def from_milliliter({:milliliter, volume}, unit) do case unit do :cup -> volume / 240 :fluid_ounce -> volume / 30 :teaspoon -> volume / 5 :tablespoon -> volume / 15 _ -> volume end end def convert({unit1, volume}, unit2) do from_milliliter({:milliliter, to_milliliter({unit1, volume})}, unit2) end end