2
%% The current treatment of typed records leaves much to be desired.
3
%% These are not made up examples; I have cases like that the branch
4
%% of the HiPE compiler with types in records. I get very confusing
5
%% warnings which require a lot of effort to find their cause and why
6
%% a function has no local return.
9
-export([test/0, mk_foo_exp/2]).
11
-record(foo, {a :: integer(), b :: [atom()]}).
14
%% For these functions we currently get the following warnings:
15
%% 1. Function test/0 has no local return
16
%% 2. The call trec:mk_foo_loc(42,any()) will fail since it differs
17
%% in argument position 1 from the success typing arguments:
18
%% ('undefined',atom())
19
%% 3. Function mk_foo_loc/2 has no local return
21
%% Arguably, the second warning is not what most users have in mind
22
%% when they wrote the type declarations in the 'foo' record, so no
23
%% doubt they'll find it confusing. But note that it is also inconsistent!
24
%% How come there is a success typing for a function that has no local return?
27
mk_foo_loc(42, bar:f()).
30
#foo{a = A, b = [A,B]}.
33
%% For this function we currently get "has no local return" but we get
34
%% no reason; I want us to get a reason.
36
mk_foo_exp(A, B) when is_integer(A) ->
37
#foo{a = A, b = [A,B]}.