anchor.diff:      CoarseMemServerPort#(addrSz, logNumBytes)   Coarse;
       ByteEnMemServerPort#(addrSz, logNumBytes)   ByteEn;
       AtomicMemServerPort#(addrSz, logNumBytes)   Atomic;
  +    MMIOServerPort#(addrSz, logNumBytes)        MMIO;
   } TaggedMemServerPort#(numeric type addrSz, numeric type logNumBytes);
   
   typeclass IsMemReq#(type memReqT, type memRespT, type addrSz, type logNumBytes)
  
positive.code:     ReadOnly,
      Coarse,
      ByteEn,
      Atomic
  } MemType deriving (Bits, Eq, FShow, Bounded);
  
  typedef union tagged {
  
negative.code: typedef AtomicMemServerPort#(addrSz, 3) AtomicMem64ServerPort#(numeric type addrSz);
  typedef AtomicMemClientPort#(addrSz, 3) AtomicMem64ClientPort#(numeric type addrSz);
  
  typedef MMIOReq#(addrSz, 3)        MMIO64Req#(numeric type addrSz);
  typedef MMIOResp#(3)               MMIO64Resp;
  typedef MMIOServerPort#(addrSz, 3) MMIO64ServerPort#(numeric type addrSz);
  typedef MMIOClientPort#(addrSz, 3) MMIO64ClientPort#(numeric type addrSz);
  
  ////////////////////////////////////////////////////////////////////////////////
  
  // Unifying Memory Types and Typeclasses
  