:- module bug402. :- interface. :- type foo ---> foo ; bar ; baaz. :- pred convert(foo::in, foo::out) is semidet. :- implementation. convert(!Value) :- require_complete_switch [!.Value] ( !.Value = foo, !:Value = bar ; !.Value = bar, false ; !.Value = baaz, !:Value = foo ).