Declare optional types which are checked during development time.
See pack documentation for more information.
- the(+Type:type, ?Value) is det
- Declare that Value has the given Type.
Succeeds if Value is bound to a value that's compatible
with Type. Throws an informative exception if Value
is bound to a value that's not compatible with Type.
If Value is not bound, the type check is delayed until
Value becomes ground.
When optimizations are enabled
current_prolog_flag(optimise, true)) a macro removes
entirely so that it always succeeds.
- type_subtype(?Type, ?Subtype)[multifile]
- Multifile predicate for declaring that a Type has a Subtype. It
should only be necessary to add clauses to this predicate if
has_subtype/2 has trouble deriving this information based on
your definition of
- has_subtype(+Type, +Subtype) is semidet
- True if all values of Subtype are also values of Type. This can be
used to determine whether arguments of one type can be passed to a
predicate which demands arguments of another type.
This predicate performs probabilistic subtype detection by leveraging
your definitions for
If this predicate is not detecting your types correctly, either
improve your arbitrary/2 definition or add clauses to
the multifile predicate type_subtype/2.
- type_intersection(?Type, ?IntersectionType)[multifile]
- Multifile predicate for declaring that Type has an IntersectionType.
See type_subtype/2 for further details.
- has_intersection(Type, IntersectionType) is semidet
- True if some value of IntersectionType is also of Type. See
has_subtype/2 for further details.
- known_type(?Type:type) is semidet
- True if Type is a type known to error:has_type/2. Iterates
all known types on backtracking. Be aware that some types are
list(T)) so Type may be a non-ground term.
As a convenience, the type named
type describes the set of all
values for which
known_type/1 is true.
The following predicates are exported, but not or incorrectly documented.
- build_type_assertions(Arg1, Arg2, Arg3)