:- module bug574. :- interface. :- import_module io. :- type job ---> job1(pred(int::in, io::di, io::uo) is det) ; job2(int). :- pred process_job(job::in, io::di, io::uo) is det. :- implementation. process_job(Job, !IO) :- ( Job = job1(Pred), do_process_job1(Pred, !IO) ; Job = job2(_) ). :- pred do_process_job1(pred(int, io, io)::in(pred(in, di, uo) is det), io::di, io::uo) is det. do_process_job1(_, !IO).