The documentation for must_be/2 shows most of the types but some are missing.
The source code for has_type/2 shows the complete set.
has_type(any, _).
has_type(atom, X) :- atom(X).
has_type(atomic, X) :- atomic(X).
has_type(between(L,U), X) :- ( integer(L)
-> integer(X), between(L,U,X)
; number(X), X >= L, X =< U
).
has_type(boolean, X) :- (X==true;X==false), !.
has_type(callable, X) :- callable(X).
has_type(char, X) :- '$is_char'(X).
has_type(code, X) :- '$is_char_code'(X).
has_type(chars, X) :- '$is_char_list'(X, _Len).
has_type(codes, X) :- '$is_code_list'(X, _Len).
has_type(text, X) :- text(X).
has_type(compound, X) :- compound(X).
has_type(constant, X) :- atomic(X).
has_type(float, X) :- float(X).
has_type(ground, X) :- ground(X).
has_type(cyclic, X) :- cyclic_term(X).
has_type(acyclic, X) :- acyclic_term(X).
has_type(integer, X) :- integer(X).
has_type(nonneg, X) :- integer(X), X >= 0.
has_type(positive_integer, X) :- integer(X), X > 0.
has_type(negative_integer, X) :- integer(X), X < 0.
has_type(nonvar, X) :- nonvar(X).
has_type(number, X) :- number(X).
has_type(oneof(L), X) :- ground(X), \+ \+ memberchk(X, L).
has_type(proper_list, X) :- is_list(X).
has_type(list, X) :- is_list(X).
has_type(list_or_partial_list, X) :- is_list_or_partial_list(X).
has_type(symbol, X) :- atom(X).
has_type(var, X) :- var(X).
has_type(rational, X) :- rational(X).
has_type(string, X) :- string(X).
has_type(stream, X) :- is_stream(X).
has_type(encoding, X) :- current_encoding(X).
has_type(dict, X) :- is_dict(X).
has_type(list(Type), X) :- is_list(X), element_types(X, Type).
has_type(type, Type) :- ground(Type), current_type(Type,_,_).
Posted here because I am always looking this up.
Made a wiki so it can be changed by others in the future if needed.