Closed ilya-klyuchnikov closed 1 year ago
A repro:
-module(gradualizer_repro2). -export([foo/2]). -spec foo(List1, List2) -> List2 when List1 :: [Int], List2 :: [Int|{Int,Int}], Int :: integer(). foo([], Acc) -> Acc; foo([H | T], []) -> foo(T, [H]); foo([H | T], [HA | TA]) when is_integer(HA), H == HA + 1 -> foo(T, [{HA, H} | TA]); foo([H | T], [{HAB, HAE} | TA]) when H == HAE + 1 -> foo(T, [{HAB, H} | TA]); foo([H | T], Acc) -> foo(T, [H | Acc]).
===> Uncaught error: {case_clause,#{'HA' => {type,0,integer,[]}}} ===> Stack trace to the error location: [{typechecker,do_type_check_expr,2, [{file,"/Users/ilyaklyuchnikov/code/gr-rebar3/_build/default/plugins/gradualizer/src/typechecker.erl"}, {line,1695}]}, {typechecker,type_check_expr,2, [{file,"/Users/ilyaklyuchnikov/code/gr-rebar3/_build/default/plugins/gradualizer/src/typechecker.erl"}, {line,1687}]}, {typechecker,type_check_rel_op,5, [{file,"/Users/ilyaklyuchnikov/code/gr-rebar3/_build/default/plugins/gradualizer/src/typechecker.erl"}, {line,2199}]}, {typechecker,type_check_expr,2, [{file,"/Users/ilyaklyuchnikov/code/gr-rebar3/_build/default/plugins/gradualizer/src/typechecker.erl"}, {line,1687}]}, {typechecker,check_guard_expression,2, [{file,"/Users/ilyaklyuchnikov/code/gr-rebar3/_build/default/plugins/gradualizer/src/typechecker.erl"}, {line,4613}]}, {typechecker,'-check_guard/2-fun-0-',2, [{file,"/Users/ilyaklyuchnikov/code/gr-rebar3/_build/default/plugins/gradualizer/src/typechecker.erl"}, {line,4620}]}, {lists,foldl_1,3,[{file,"lists.erl"},{line,1355}]}, {typechecker,check_guard,2, [{file,"/Users/ilyaklyuchnikov/code/gr-rebar3/_build/default/plugins/gradualizer/src/typechecker.erl"}, {line,4619}]}]
A repro: