-module(discrep4). -export([run/0]). -type cents() :: integer(). -type account() :: atom(). -type transaction() :: {'give', cents(), account()}. run() -> Tup = money(5, you), some_op(item(count,Tup), item(account,Tup)). -spec money(cents(), account()) -> transaction(). money(Num, Name) -> {give, Num, Name}. -spec item('count', transaction()) -> cents(); ('account', transaction()) -> account(). item(count, {give, X, _}) -> X; item(account, {give, _, X}) -> X. some_op(A,B) -> A + B.