mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 09:53:36 +00:00
52 lines
1.3 KiB
Mathematica
52 lines
1.3 KiB
Mathematica
%-----------------------------------------------------------------------------%
|
|
% vim: ft=mercury ts=4 sw=4 et
|
|
%-----------------------------------------------------------------------------%
|
|
%
|
|
% This is an instance of the same kind of bug that gh72a.m tests for,
|
|
% but with a user-written predicate instead of an automatically constructed
|
|
% type-specific unification predicate.
|
|
%
|
|
|
|
:- module gh72b.
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module list.
|
|
:- import_module string.
|
|
|
|
:- type maybe_reviewed
|
|
---> reviewed(package)
|
|
; unreviewed(package).
|
|
|
|
:- type package
|
|
---> package(string, string).
|
|
|
|
main(!IO) :-
|
|
R = unreviewed(_),
|
|
fill(R),
|
|
io.write_string(dump_maybe_reviewed(R), !IO),
|
|
io.nl(!IO).
|
|
|
|
:- pred fill(maybe_reviewed).
|
|
:- mode fill(bound(unreviewed(free)) >> ground) is det.
|
|
:- pragma no_inline(fill/1).
|
|
|
|
fill(unreviewed(P)) :-
|
|
P = package("a", "b").
|
|
|
|
:- func dump_maybe_reviewed(maybe_reviewed) = string.
|
|
:- pragma no_inline(dump_maybe_reviewed/1).
|
|
|
|
dump_maybe_reviewed(reviewed(P)) = "reviewed " ++ dump_package(P).
|
|
dump_maybe_reviewed(unreviewed(P)) = "unreviewed " ++ dump_package(P).
|
|
|
|
:- func dump_package(package) = string.
|
|
:- pragma no_inline(dump_package/1).
|
|
|
|
dump_package(package(A, B)) = A ++ B.
|