This module defines some basic concrete protocols,
namely protocols for transferring a unit and a boolean.

Some protocol combinators are provided to form new protocols
from old protocols. Eg one can form a product of
two protocols to get a protocol for query-answer dialogues
about a pair of values. Similarly, one can construct
protocols for a sum of two types, a maybe type and a list type.

Any protocol can be also extended to include effort indices
in queries or to allow incremental computation with non-blocking
queries on progress, multiple dialogue thread tracking and the communication
of a failure.