-module(contracts_with_subtypes2). -compile(export_all). -behaviour(supervisor). -spec t(Arg) -> ok when Arg :: {a, A}, A :: {b, B}, B :: {c, C}, C :: {d, D}, D :: {e, E}, E :: {f, _}. t(X) -> get(X). t() -> t({a, {b, {c, {d, {e, {g, 3}}}}}}). % breaks the contract %% This one should possibly result in warnings about unused variables. -spec l() -> ok when X :: Y, Y :: X. l() -> ok. %% This is the example from seq12547 (ticket OTP-11798). %% There used to be a warning. -spec init(term()) -> Result when Result :: {ok, {{supervisor:strategy(), non_neg_integer(), pos_integer()}, [supervisor:child_spec()]}} | ignore. init(_) -> foo:bar().