% foo/2 is an example of a predidate that is tail recursive in non-trailing
% grades, but not tail recursive in trailing grades.

:- module trail_non_tailcall.
:- interface.

:- import_module int.

:- pred foo(int::in, int::out) is cc_nondet.

:- implementation.

:- pragma require_tail_recursion(pred(foo/2)).

foo(X, Y) :-
   (
      number_is_special(X),
      Y = 3
   ;
      X = 5,
      foo(X + 1, Y)
   ).

:- pred number_is_special(int::in) is semidet.

number_is_special(10).
number_is_special(20).
number_is_special(30).
number_is_special(40).
