diff --git a/src/prolog/lib/error.pl b/src/prolog/lib/error.pl index 21955f50..e7b7fe66 100644 --- a/src/prolog/lib/error.pl +++ b/src/prolog/lib/error.pl @@ -27,15 +27,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ must_be(Type, Term) :- + must_be_(type, Type), must_be_(Type, Term). - must_be_(Type, _) :- var(Type), instantiation_error(Type). must_be_(integer, Term) :- check_(integer, integer, Term). must_be_(atom, Term) :- check_(atom, atom, Term). must_be_(list, Term) :- check_(ilist, list, Term). +must_be_(type, Term) :- check_(type, type, Term). check_(Pred, Type, Term) :- ( var(Term) -> instantiation_error(Term) @@ -47,6 +48,10 @@ ilist(V) :- var(V), instantiation_error(V). ilist([]). ilist([_|Ls]) :- ilist(Ls). +type(type). +type(integer). +type(atom). +type(list). /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - can_be(Type, Term) @@ -63,6 +68,7 @@ ilist([_|Ls]) :- ilist(Ls). can_be(Type, Term) :- + must_be(type, Type), ( var(Term) -> true ; can_(Type, Term) -> true ; type_error(Type, Term)