% This is a regression test for a bug in simplify/common.m where
% the pos(X, Y) deconstruction in the head of adj/2 was being propagated
% into the body of the lambda expression, changing the non-locals of the 
% lambda expresssion, but the uni-modes field of the lambda construction 
% unification was not being updated, resulting in an abort during lambda
% expansion.
:- module lambda_struct_bug.

:- interface.

:- import_module list, pair, set.

:- type pos
	--->	pos(int, int).

:- type adj
	--->	adj(pos, pos).

:- type maze	==	set(pair(pos, pos)).

:- pred adj(pos, list(adj)).
:- mode adj(in, out) is det.

:- implementation.

:- import_module int, require, solutions.

adj(pos(X, Y), Adjs) :-
	Pred = (pred(Adj::out) is nondet :-
			(
				X1 = X - 1,
				Adj = adj(pos(X1, Y), pos(X, Y))
			;
				X1 = X + 1,
				Adj = adj(pos(X1, Y), pos(X, Y))
			;
				Y1 = Y + 1,
				Adj = adj(pos(X, Y1), pos(X, Y))
			;
				Y1 = Y - 1,
				Adj = adj(pos(X, Y1), pos(X, Y))
			),
			Adj = adj(pos(A, B), _),
			A >= 0, A =< 10, % XXX
			B >= 0, B =< 10 % XXX
	),
	solutions(Pred, Adjs).
