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 the
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 arbitrary/2.
- 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 error:has_type/2 and arbitrary/2.
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
polymorphic (like
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.
Undocumented predicates
The following predicates are exported, but not or incorrectly documented.
- build_type_assertions(Arg1, Arg2, Arg3)
- build_determinism_assertions(Arg1, Arg2)
- run_goal_at_mode(Arg1, Arg2, Arg3, Arg4)