:- module maybe.
:- interface.
:- type maybe_error
	--->	ok 
	;	error(string).
:- type maybe(T)
	--->	no 
	;	yes(T).
:- type maybe_error(T) == maybe.maybe_error(T, string).
:- type maybe_error(T, E)
	--->	ok(T)
	;	error(E).
:- inst (maybe(I)) == bound(no ; yes(I)).
:- inst (maybe_error(I)) == bound(error(ground) ; ok(I)).
:- inst (maybe_error_ok(I)) == bound(ok(I)).
:- inst (maybe_yes(I)) == bound(yes(I)).
:- pred fold_maybe(pred(T, U, U), maybe.maybe(T), U, U).
:- mode fold_maybe((pred((builtin.in), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.in), (builtin.out)) is det.
:- mode fold_maybe((pred((builtin.in), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.mdi), (builtin.muo)) is det.
:- mode fold_maybe((pred((builtin.in), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- mode fold_maybe((pred((builtin.in), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.in), (builtin.out)) is semidet.
:- mode fold_maybe((pred((builtin.in), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.mdi), (builtin.muo)) is semidet.
:- mode fold_maybe((pred((builtin.in), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.di), (builtin.uo)) is semidet.
:- func fold_maybe((func(T, U) = U), maybe.maybe(T), U) = U.
:- pred map_fold2_maybe(pred(T, U, Acc1, Acc1, Acc2, Acc2), maybe.maybe(T), maybe.maybe(U), Acc1, Acc1, Acc2, Acc2).
:- mode map_fold2_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode map_fold2_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode map_fold2_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode map_fold2_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode map_fold2_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode map_fold2_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred map_fold3_maybe(pred(T, U, Acc1, Acc1, Acc2, Acc2, Acc3, Acc3), maybe.maybe(T), maybe.maybe(U), Acc1, Acc1, Acc2, Acc2, Acc3, Acc3).
:- mode map_fold3_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode map_fold3_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode map_fold3_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode map_fold3_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode map_fold3_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode map_fold3_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred map_fold_maybe(pred(T, U, Acc, Acc), maybe.maybe(T), maybe.maybe(U), Acc, Acc).
:- mode map_fold_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is det.
:- mode map_fold_maybe((pred((builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is det.
:- mode map_fold_maybe((pred((builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- mode map_fold_maybe((pred((builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out), (builtin.in), (builtin.out)) is semidet.
:- mode map_fold_maybe((pred((builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet), (builtin.in), (builtin.out), (builtin.mdi), (builtin.muo)) is semidet.
:- mode map_fold_maybe((pred((builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is semidet.
:- pred map_maybe(pred(T, U), maybe.maybe(T), maybe.maybe(U)).
:- mode map_maybe((pred((builtin.in), (builtin.out)) is det), (builtin.in), (builtin.out)) is det.
:- mode map_maybe((pred((builtin.in), (builtin.out)) is semidet), (builtin.in), (builtin.out)) is semidet.
:- mode map_maybe((pred((builtin.in), (builtin.out)) is multi), (builtin.in), (builtin.out)) is multi.
:- mode map_maybe((pred((builtin.in), (builtin.out)) is nondet), (builtin.in), (builtin.out)) is nondet.
:- func map_maybe(((func T) = U), maybe.maybe(T)) = maybe.maybe(U).
:- pred maybe_is_yes(maybe.maybe(T), T).
:- mode maybe_is_yes((builtin.in), (builtin.out)) is semidet.
