18.8 Summary of Function Types
Functions may have a void or non-void return type and they may or may
not have one of the special suffixes, _lpdf, _lpmf,
_lp, or _rng.
Void vs. Non-Void Return
Only functions declared to return void may be used as
statements. These are also the only functions that use return
statements with no arguments.
Only functions declared to return non-void values may be used
as expressions. These functions require return statements with
arguments of a type that matches the declared return type.
Suffixed or Non-Suffixed
Only functions ending in _lpmf or _lpdf and with
return type real may be used as probability functions in
sampling statements.
Only functions ending in _lp may access the log probability
accumulator through sampling statements or target +=
statements. Such functions may only be used in the transformed
parameters or model blocks.
Only functions ending in _rng may access the built-in
pseudo-random number generators. Such functions may only be used in
the generated quantities block or transformed data block, or in the
bodies of other user-defined functions ending in _rng.