Can I just add this:
First, as Andy already hinted, it's not how a data type is implemented but the operations in its API which defines it. A list does not map directly to a hook. A hook can be implemented as a list, but that is not important.
An example of a
hook is before-print-hook which is used in (ice-9 history) and which can be
used, for example, to support a communication protocol when running
Guile in an IDE-like environment in Emacs.
If we had a naive use of lists as hooks, the correct way to extend it would be something like: