:- module list.
:- interface.
:- import_module pretty_printer.
:- import_module term.
:- type list(T)
	--->	[] 
	;	'[|]'(T, list.list(T)).
:- inst (list_skel) == list.list_skel(free).
:- inst (non_empty_list) == bound('[|]'(ground, ground)).
:- inst (list(I)) == list.list_skel(I).
:- inst (list_skel(I)) == bound([] ; '[|]'(I, list.list_skel(I))).
:- mode (in_list_skel) == ((list.list_skel) >> (list.list_skel)).
:- mode (list_skel_out) == ((list.list_skel) >> ground).
:- mode (out_list_skel) == (free >> (list.list_skel)).
:- mode (list_skel_in(I)) == (list.list_skel(I) >> list.list_skel(I)).
:- mode (list_skel_out(I)) == (free >> list.list_skel(I)).
