module Versioned_rpc: Versioned_rpcThe proto-typical example of this scenario is a commander that needs to call out to many assistants for that same system. In this scenario, the assistants each implement a single version of the rpc and the commander has to take this into account.
The proto-typical example of this scenario is an assistant from one system calling out the commander of another system In this scenario, the assistants each know a single version of the rpc to call and the commander has to implement them all.
  In each scenario, it is desirable that the party responsible for
  managing versions be coded largely in terms of a single "master"
  version of the types involved, with all necessary type conversions
  relegated to a single module.  Versioned_rpc is intended for
  implementing such a module.
Type coercions into and out of the model go in the directions indicated by the following diagram:
       Caller converts                 Callee converts
       ===============                 ===============
           caller                        callee
           |       callee                |      callee
           |       |       caller        |      |       callee
           |       |       |             |      |       |
        ,-->-- Q1 --> R1 -->-.      Q1 -->-.    |    ,-->-- R1
       /                      \             \   |   /
      Q --->-- Q2 --> R2 -->-- R    Q2 -->-- Q --> R --->-- R2
       \                      /             /       \
        `-->-- Q3 --> R3 -->-'      Q3 -->-'         `-->-- R3
 module Caller_converts:sig..end
module Callee_converts:sig..end
module Menu:sig..end