% Test of switch detection with explicit existential quantification.

:- module some_switch.
:- interface.

:- type nat ---> o ; s(nat).

:- func add(nat,nat) = nat.
:- mode add(in,in)   = in  is semidet.
:- mode add(out,out) = in  is multi.
:- mode add(in,in)   = out is det.

:- implementation.
           
add(X,Y) = Z :-
   (         ( X=o    , Z=Y ) ;
   some [Xp] ( X=s(Xp), Z=s(add(Xp,Y)) ) ).

