ADDED: library(error): instantiation_error/1, domain_error/3, type_error/3

These predicates simplify throwing ISO errors.
This commit is contained in:
Markus Triska
2020-04-27 17:34:47 +02:00
parent 7a2981e21c
commit 2b1692a860

View File

@@ -1,5 +1,9 @@
:- module(error, [must_be/2, :- module(error, [must_be/2,
can_be/2]). can_be/2,
instantiation_error/1,
domain_error/3,
type_error/3
]).
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Written September 2018 by Markus Triska (triska@metalevel.at) Written September 2018 by Markus Triska (triska@metalevel.at)
@@ -32,10 +36,10 @@ must_be(Type, Term) :-
must_be_(Type, _) :- must_be_(Type, _) :-
var(Type), var(Type),
instantiation_error(Type). instantiation_error(must_be/2).
must_be_(var, Term) :- must_be_(var, Term) :-
( var(Term) -> true ( var(Term) -> true
; throw(error(uninstantiation_error, _)) ; throw(error(uninstantiation_error, must_be/2))
). ).
must_be_(integer, Term) :- check_(integer, integer, Term). must_be_(integer, Term) :- check_(integer, integer, Term).
must_be_(atom, Term) :- check_(atom, atom, Term). must_be_(atom, Term) :- check_(atom, atom, Term).
@@ -43,12 +47,12 @@ must_be_(list, Term) :- check_(ilist, list, Term).
must_be_(type, Term) :- check_(type, type, Term). must_be_(type, Term) :- check_(type, type, Term).
check_(Pred, Type, Term) :- check_(Pred, Type, Term) :-
( var(Term) -> instantiation_error(Term) ( var(Term) -> instantiation_error(must_be/2)
; call(Pred, Term) -> true ; call(Pred, Term) -> true
; type_error(Type, Term) ; type_error(Type, Term, must_be/2)
). ).
ilist(V) :- var(V), instantiation_error(V). ilist(V) :- var(V), instantiation_error(must_be/2).
ilist([]). ilist([]).
ilist([_|Ls]) :- ilist(Ls). ilist([_|Ls]) :- ilist(Ls).
@@ -76,7 +80,7 @@ can_be(Type, Term) :-
must_be(type, Type), must_be(type, Type),
( var(Term) -> true ( var(Term) -> true
; can_(Type, Term) -> true ; can_(Type, Term) -> true
; type_error(Type, Term) ; type_error(Type, Term, can_be/2)
). ).
can_(integer, Term) :- integer(Term). can_(integer, Term) :- integer(Term).
@@ -92,11 +96,11 @@ list_or_partial_list([_|Ls]) :-
Shorthands for throwing ISO errors. Shorthands for throwing ISO errors.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
instantiation_error(_Term) :- instantiation_error(Context) :-
throw(error(instantiation_error, _)). throw(error(instantiation_error, Context)).
domain_error(Type, Term) :- domain_error(Type, Term, Context) :-
throw(error(domain_error(Type, Term), _)). throw(error(domain_error(Type, Term), Context)).
type_error(Type, Term) :- type_error(Type, Term, Context) :-
throw(error(type_error(Type, Term), _)). throw(error(type_error(Type, Term), Context)).