% vim: ft=mercury ts=4 sw=4 et

:- module y1.
:- interface.

:- import_module list.
:- import_module y2.

:- pred foo(list(ta)::in, list(ta)::out) is det.

:- implementation.

foo(TAs, AdamsTAs) :-
    IsAdams =
        ( pred(TA::in) is semidet :-
            extract_second(coerce(TA), Second),
            Second = 42
        ),
    filt(IsAdams, TAs, AdamsTAs).

:- pred filt(pred(T)::in(pred(in) is semidet), list(T)::in,
    list(T)::out) is det.

filt(_, [],  []).
filt(P, [H | T], True) :-
    ( if P(H) then
        filter(P, T, TrueTail),
        True = [H | TrueTail]
    else
        filt(P, T, True)
    ).
